2011-08-25 32 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