2014-01-29 5 views
2

Я хочу добавить Grid как ItemPanelTemplate из ItemsControl в WPF.Добавить сетку в ItemsPanelTemplate of ItemsControl

Я знаю, что есть много подобных вопросов. Но все из них, которые я видел до сих пор, говорят о динамическом добавлении строк и столбцов, и они не покрыли его в хорошем смысле (на мой взгляд).

Так что вещь, которую я хочу, может быть простейшей формой. Но я не знаю, как это сделать.

Конечно, я знаю, что это не сработает. Но это просто для того, чтобы показать мою идею.

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding ArticleName}" Grid.Row="0" Grid.Column="0" /> 
      <TextBlock Text="{Binding ArticleTradeName}" Grid.Row="0" Grid.Column="1" /> 
      <ListView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"> 
       . 
       . 
       . 
      </ListView> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
 
    ---------------------------------------- 
    | #1 name  | #1 trade name   | 
    --------------------------------------- 
    | GridView        | 
    |  Row1        | 
    | Row2        | 
    | .         | 
    | .         | 
    |  RowN        | 
    ---------------------------------------- 
    | #2 name  | #2 trade name   | 
    ---------------------------------------- 
    | GridView        | 
    | Row1        | 
    | Row2        | 
    | .         | 
    | .         | 
    |  RowN        | 
    ---------------------------------------- 
    ... 
+0

На второй взгляд, кажется, что вы недоразумение 'ItemsPanelTemplate' (? Почему просто не поставить сетку внутри' DataTemplate') В любом случае, это не ясно, какой макет вы» пытаюсь добиться. – McGarnagle

+0

Вы знаете, что у меня есть список, который я хочу нарисовать каждый Элемент таким образом, что у меня есть два разных TextBox, которые связаны, и GridView под ними, который также связан. –

+0

Я не очень понимаю вас. Можете ли вы макет макета, как пример в моем редактировании на ваш вопрос? – McGarnagle

ответ

3

Там нет необходимости менять ItemsPanel от своего значения по умолчанию (StackPanel). Просто поставьте Grid внутри самой ItemTemplate. Как это:

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions>     
       <TextBlock Text="{Binding ArticleName}" Grid.Row="0" Grid.Column="0" /> 
       <TextBlock Text="{Binding ArticleTradeName}" Grid.Row="0" Grid.Column="1" /> 
       <ListView ItemsSource="{Binding Samples}" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"> 
        <ListView.View> 
         <GridView> 
          . 
          . 
          . 
         <GridView> 
        </ListView.View> 
       </ListView> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+2

О, я думаю, теперь я понимаю, что такое использование ItemPanelTempate. по умолчанию это StackPanle ?! и если я хочу изменить способ размещения элементов, я должен изменить его PanelTemplate. Я пропустил этот важный момент. Большое спасибо за вашу доброту. –

+0

@MehrdadKamelzadeh См. Также [Grid.IsSharedSizeScope] (http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.issharedsizescope (v = vs.110) .aspx). Если вы установили 'Grid.IsSharedSizeScope =" True "' в 'ItemsControl' и добавили' SharedSizeGroup' в определения столбцов вашего шаблона, все столбцы выстроились в очередь. – nmclean

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