2010-06-15 36 views
6

Xin chào Tôi có một biểu đồ dữ liệu có một số cột datagridtemplate giống hệt nhau với mỗi cột có một văn bản dữ liệu khác nhau trên bảng xếp chồng của mẫu.WPF DataGridTemplateColumn được chia sẻ mẫu?

<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> 

Tôi muốn mỗi cột sử dụng một itemtemplate cụ thể (như tôi đã thực hiện với hộp danh sách) nhưng dường như không thể thấy cách trừ khi tôi thiếu thứ gì đó.

Trả lời

10

Bạn có thể sử dụng một ContentPresenter để nhanh chóng một DataTemplate cho mỗi cột:

<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> 

Nếu các yếu tố của Times là tất cả các loại tương tự, bạn cũng có thể làm <DataTemplate DataType={x:Type YourType}> và sau đó bạn sẽ không cần phải xác định ContentTemplate="{StaticResource ColumnTemplate}" trên mỗi cột.

+0

Cảm ơn đó là những gì tôi đang tìm kiếm. Tôi đã tạo mẫu nhưng không biết về ContentPresenter để hiển thị nó trong cột. Một điều cuối cùng, bạn có biết cách tôi có thể thay thế màu nền của các cột được tạo mẫu này không? Cảm ơn bạn lần nữa. – obaylis

+0

@obaylis: Tôi nghĩ bạn chỉ có thể đặt thuộc tính AlternatingRowBackground trên DataGrid. Nếu bạn cần một cái gì đó phức tạp hơn, bạn có thể đặt AlternationCount và sau đó sử dụng AlternationIndex. Đây là một bài đăng trên blog mô tả các cách tạo kiểu cho DataGrid: http://blogs.msdn.com/b/jaimer/archive/2009/01/20/styling-microsoft-s-wpf-datagrid.aspx – Quartermeister

Các vấn đề liên quan