0

アイテムのリストを表示するページがあります。

私のマークアップは基本的に

<Grid x:Name="ItemGrid">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="30*" x:Name="Column1Header"/>
    <ColumnDefinition Width="15*" x:Name="Column2Header"/>
    <ColumnDefinition Width="15*" x:Name="Column3Header"/>
...
<ItemsControl Name="ItemsList">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <Grid x:Name="Items">
        <ColumnDefinition Width="30*" x:Name="Column1"/>
        <ColumnDefinition Width="15*" x:Name="Column2"/>
        <ColumnDefinition Width="15*" x:Name="Column3"/>
...

スター サイズ設定を使用する 2 つの個別のグリッド (つまり、SharedSizeGroups を使用できません。非表示にする構成オプションColumn3とヘッダーを追加する必要があります。コードで幅を 0 に設定することでヘッダーを簡単に非表示にできますが、わかりません。 out how to hide Column3. 項目をループすると、常に null になります。

foreach (var item in ItemsList.Items)
{
  var container = ItemsList.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
  // container is null
}

基本的に、2 つの列は同じサイズである必要があります。Grid は 30 秒ごとに項目の新しいリストが取り込まれますが、読み込まれるとグリッドのサイズは変更されません。

また、幅を定義するスタイルを両方の列で共有してから、コードでスタイルを変更しようとしましたが、うまくいきませんでした。

<Style TargetType="{x:Type ColumnDefinition}" x:Key="Column3Width">
   <Setter Property="Width" Value="15*"/>
</Style>

それを変更すると、「'SetterBase' が使用中 (封印) になった後は、変更できません。」

4

1 に答える 1

1

アイテム列の幅をヘッダー列にバインドできます。

Width="{Binding Width, ElementName=ColumnXHeader}"
于 2012-04-30T16:41:18.180 に答える