2013-12-20 5 views
0

У меня есть ItemsControl, в котором есть много столбцов и статическая строка заголовка.Элементы управления сеткой между controltemplate и itemtemplate

Я знаю HeaderedItemsControl, но я не уверен, что он может достичь того, чего я хочу.

В настоящее время у меня есть ControlTemplate, служащий контейнером для заголовка и ItemsPresenter, а затем ItemTemplate используется для организации записей.

В настоящее время у меня есть дублирующаяся сетка как в шаблонах контента, так и в элементах, и я хочу найти элегантное решение, в котором я могу использовать одну и ту же сетку между обоими шаблонами, поэтому мне не нужно менять две вещи при редактировании. Макет того, как он выглядит ниже, у фактического элемента управления есть много столбцов. Я читал о IsSharedSizeScope и SharedSizeGroup, но я понимаю, что это не будет работать, потому что только функции, когда есть две сетки, разделяющие родительский элемент (они оба должны быть внутри ControlTemplate)

<ItemsControl ItemsSource="{Binding SomeSource}"> 
    <ItemsControl.Template> 
     <ControlTemplate TargetType="ItemsControl"> 
      <StackPanel> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" Text="Col1" /> 
        <TextBlock Grid.Column="1" Text="Col2" /> 
        <TextBlock Grid.Column="2" Text="Col3" /> 
       </Grid> 
       <ItemsPresenter/> 
      </StackPanel> 
     </ControlTemplate> 
    </ItemsControl.Template> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="ItemCol1" /> 
       <TextBlock Grid.Column="1" Text="ItemCol2" /> 
       <TextBlock Grid.Column="2" Text="ItemCol3" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Я вероятно, сделал что-то плохое, так что не стесняйтесь давать мне указатели.

ответ

0

У меня возникло ощущение, что вы полностью установили значение ItemsSource.

Он должен выглядеть следующим образом:

<ItemsControl ItemsSource="{Binding SomeSource}"> 

Когда я беру свой пример и запустить все это работает хорошо для меня.

Если вы хотите поделиться размерами столбцов, то да, вы можете использовать SharedSizeGroup. Вы должны установить область действия ItemsControl.

У вас неправильное определение SharedSizeGroup. Он работает независимо от того, где размещаются Grids, поскольку они имеют одинаковый один из своих родителей. Это относится к вам, поскольку ItemsControl - это самый верхний элемент управления, поэтому он является родителем для каждого элемента управления внутри.

+0

Я дам ему шанс, да, я отредактировал пример, когда я вставлял ответ, привязка - это то, что на самом деле похоже на то, что я изменю это. Смогу ли я удалить все теги для одной из сеток? – pgwri

Смежные вопросы