У меня есть страница, которая отображает список элементов.Есть ли способ программно изменить эти определения столбцов?
Моя разметка в основном
<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
. Перебор элементов всегда приводит к нулевой.
foreach (var item in ItemsList.Items)
{
var container = ItemsList.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
// container is null
}
B так как эти два столбца должны быть одинакового размера. Сетка заполняется каждые 30 секунд новым списком элементов, если это имеет значение, но размер сетки не изменяется после ее загрузки.
Я также попробовал, чтобы оба столбца делили стиль, определяющий ширину, а затем пытались изменить стиль с помощью кода, но это тоже не сработало.
<Style TargetType="{x:Type ColumnDefinition}" x:Key="Column3Width">
<Setter Property="Width" Value="15*"/>
</Style>
Изменение это привело к ошибке: «После того, как„SetterBase“используется (опломбированный), он не может быть изменен.»
Пытался связать ширину столбцов в ширину заголовка столбца в? –
@ H.B., Как я мог это сделать? Единственный способ, которым я знаю, - это либо SharedSizeGroup, что невозможно при выборе размера звезды, либо использование стиля, что приводит к ошибке, упомянутой выше. – Brandon
Что-то вроде 'Width =" {Binding Width, ElementName = ColumnXHeader} "'? –