我有一个显示项目列表的页面。
我的标记基本上是
<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来轻松隐藏标题,但是
我无法弄清楚如何隐藏Column3
。循环遍历项目总是会导致null。
foreach (var item in ItemsList.Items)
{
var container = ItemsList.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
// container is null
}
基本上两列的大小必须相同。如果重要的话,网格每隔30秒填充一个新的项目列表,但网格大小在加载后不会改变。
我也尝试让两个列共享一个定义宽度的Style,然后尝试通过代码更改样式,但这也没有用。
<Style TargetType="{x:Type ColumnDefinition}" x:Key="Column3Width">
<Setter Property="Width" Value="15*"/>
</Style>
修改它会导致错误:“在'SetterBase'使用(密封)之后,它无法修改。”
答案 0 :(得分:1)
您可以将items列的宽度绑定到标题列:
Width="{Binding Width, ElementName=ColumnXHeader}"