2011-08-25 36 views
0

我有以下xaml代碼。如何將重複樣式移動到資源部分?

<tk:DataGrid 
    ItemsSource="{Binding Path=Products}" 
    AutoGenerateColumns="False"> 
    <tk:DataGrid.Columns> 
     <tk:DataGridTextColumn 
        Header="Id"> 
      <tk:DataGridTextColumn.CellStyle> 
       <Style TargetType="{x:Type tk:DataGridCell}"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <TextBlock Margin="0,10" Text="{Binding Path=Id}" /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </tk:DataGridTextColumn.CellStyle> 
     </tk:DataGridTextColumn> 
     <tk:DataGridTextColumn 
        Header="Product"> 
      <tk:DataGridTextColumn.CellStyle> 
       <Style TargetType="{x:Type tk:DataGridCell}"> 
        <Setter Property="ContentTemplate"> 
         <Setter.Value> 
          <DataTemplate> 
           <TextBlock Margin="0,10" Text="{Binding Path=Name}" /> 
          </DataTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </tk:DataGridTextColumn.CellStyle> 
     </tk:DataGridTextColumn> 
    </tk:DataGrid.Columns> 
</tk:DataGrid> 

我該如何擺脫複製粘貼?將它移動到資源的直接方式失敗,因爲Text =「{Binding Path = XYZ}」停止工作。

回答

0

我不認爲你可以在這裏做你想做的事情,即爲這兩個單元格定義一個模板。然而,使用DataGridTemplateColumn將拿出XAML的一些行(這是一個有點奇怪使用DataGridTextColumn然後反正改寫其控制模板):

<DataGrid ItemsSource="{Binding Path=Products}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn Header="ID"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Margin="10,0" Text="{Binding Path=ID}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
      <DataGridTemplateColumn Header="Name"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Margin="10,0" Text="{Binding Path=Name}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

有使用DataGridTextColum做,這個時候的另一種方式,這應該給你接近你想要的東西:

<DataGrid Name="ui_datagrid" AutoGenerateColumns="False"> 
     <DataGrid.Resources> 
      <Style TargetType="{x:Type DataGridCell}"> 
       <Setter Property="Padding" Value="0,10"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type DataGridCell}"> 
          <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
           <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </Border> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </DataGrid.Resources> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

非常感謝! – vkrzv