2010-06-15 23 views
6

Merhaba Birbirinden farklı bir datagridtemplate sütunları olan bir datagrid var.WPF DataGridTemplateColumn paylaşılan şablonu?

<toolkit:DataGridTemplateColumn Header="Col 1"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[0]}"> 
         <!-- the structure that I want to extract to a template --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

<toolkit:DataGridTemplateColumn Header="Col 2"> 
       <toolkit:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel DataContext="{Binding Times[1]}"> 
         <!-- the same structure here --> 
         </StackPanel> 
        </DataTemplate> 
       </toolkit:DataGridTemplateColumn.CellTemplate> 
</toolkit:DataGridTemplateColumn> 

ben her sütun (bir liste kutusunda ile yaptığım gibi) belirli bir ItemTemplate kullanmak ama bir şey eksik sürece nasıl görünüyor olamaz sahip olmak istiyorum.

cevap

10

Her sütun için bir DataTemplate örneğini bir ContentPresenter kullanabilirsiniz:

<toolkit:DataGrid.Resources> 
    <DataTemplate x:Key="ColumnTemplate"> 
     <StackPanel> 
      <!-- the structure that I want to extract to a template --> 
     </StackPanel> 
    </DataTemplate> 
</toolkit:DataGrid.Resources> 
<toolkit:DataGrid.Columns> 
    <toolkit:DataGridTemplateColumn Header="Col 1"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[0]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
    <toolkit:DataGridTemplateColumn Header="Col 2"> 
     <toolkit:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ContentPresenter ContentTemplate="{StaticResource ColumnTemplate}" Content="{Binding Times[1]}"/> 
      </DataTemplate> 
     </toolkit:DataGridTemplateColumn.CellTemplate> 
    </toolkit:DataGridTemplateColumn> 
</toolkit:DataGrid.Columns> 

Times elemanlarının hepsi aynı tip iseniz, ayrıca <DataTemplate DataType={x:Type YourType}> yapabileceğini ve sonra ContentTemplate="{StaticResource ColumnTemplate}" belirtmek gerek olmaz her sütunda.

+0

Aradığım şey için teşekkürler. Şablonu oluşturdum ancak ContentPresenter'ı sütunda görüntülemek için bilmiyordum. Son bir şey, bu şablonlu sütunların arka plan rengini nasıl değiştirebileceğimi biliyor musunuz? Tekrar teşekkürler. – obaylis

+0

@obaylis: Ben sadece DataGrid üzerinde AlternatingRowBackground özelliğini ayarlayabilirsiniz. Daha karmaşık bir şeye ihtiyacınız varsa, AlternationCount'u ayarlayabilir ve ardından AlternationIndex'i kullanabilirsiniz. İşte bir DataGrid'i biçimlendirmenin yollarını açıklayan bir blog yazısı: http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister