2012-04-30 4 views
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 в коде, но я не могу понять, как скрыть 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“используется (опломбированный), он не может быть изменен.»

+0

Пытался связать ширину столбцов в ширину заголовка столбца в? –

+0

@ H.B., Как я мог это сделать? Единственный способ, которым я знаю, - это либо SharedSizeGroup, что невозможно при выборе размера звезды, либо использование стиля, что приводит к ошибке, упомянутой выше. – Brandon

+0

Что-то вроде 'Width =" {Binding Width, ElementName = ColumnXHeader} "'? –

ответ

1

Вы можете связать ширину столбцов элементов в столбцы заголовка:

Width="{Binding Width, ElementName=ColumnXHeader}" 
Смежные вопросы