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"/>
...

使用星号大小的两个单独的网格(这意味着我不能使用 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
}

基本上两列需要相同的大小。网格每 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 回答