我有一个显示项目列表的页面。
我的标记基本上是
<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'(密封)后,它不能被修改。”