WPF DataGrid列不使用我的默认元素样式

时间:2015-01-21 13:43:20

标签: c# wpf xaml datagrid wpfdatagrid

有没有办法让DataGrid在DataGridTextColumn,DataGridComboBoxColumn,DataGridCheckBoxColumn和DataGridHyperlinkColumn中使用我的默认元素样式?

据我所知,这个属性不能在ResourceDictionary中设置,并且覆盖样式的唯一方法是在生成DataGrid时每列显式设置ElementStyle和EditingElementStyle。

我真的希望这段代码能够自动将我的样式用于列中的元素......

  <DataGrid ItemsSource="{Binding Customers}" />

此代码可以使用,但是每个DataGrid都需要添加很多额外的代码...

  <DataGrid ItemsSource="{Binding Customers}"
            AutoGenerateColumns="False">
     <DataGrid.Columns>
        <DataGridTextColumn Header="First Name"
                            Binding="{Binding FirstName}"
                            EditingElementStyle="{StaticResource {x:Type TextBox}}" />
        <DataGridTextColumn Header="Last Name"
                            Binding="{Binding LastName}"
                            EditingElementStyle="{StaticResource {x:Type TextBox}}" />
        <DataGridHyperlinkColumn Header="Website"
                                 Binding="{Binding Website}"
                                 EditingElementStyle="{StaticResource {x:Type TextBox}}" />
        <DataGridCheckBoxColumn Header="Newsletter"
                                Binding="{Binding Newsletter}">
           <DataGridCheckBoxColumn.ElementStyle>
              <Style TargetType="{x:Type CheckBox}"
                     BasedOn="{StaticResource {x:Type CheckBox}}">
                 <Setter Property="HorizontalAlignment"
                         Value="Center" />
              </Style>
           </DataGridCheckBoxColumn.ElementStyle>
           <DataGridCheckBoxColumn.EditingElementStyle>
              <Style TargetType="{x:Type CheckBox}"
                     BasedOn="{StaticResource {x:Type CheckBox}}">
                 <Setter Property="HorizontalAlignment"
                         Value="Center" />
              </Style>
           </DataGridCheckBoxColumn.EditingElementStyle>
        </DataGridCheckBoxColumn>
        <DataGridTextColumn Header="Image"
                            Binding="{Binding Image}"
                            EditingElementStyle="{StaticResource {x:Type TextBox}}" />
     </DataGrid.Columns>
  </DataGrid>

任何建议表示赞赏。感谢

1 个答案:

答案 0 :(得分:0)

您需要为DataGridTextColumn定义默认样式。除非您不能,否则请参阅此问题:Why can't I style a DataGridTextColumn?

澄清一下,我的意思是,我希望你可以做的是:

<Style TargetType="{x:Type DataGridTextColumn}">
    <Style.Setters>
        <Setter PropertyName="EditingElementStyle" Value="{StaticResource {x:Type TextBox}}"/>
    </Style.Setters>
</Style>

然而,由于对其他问题的最佳答案中概述的原因,这不会起作用。我想如果你真的需要这个,你想做的就是采取类似于其他问题的答案。具体来说,您可能希望为DataGrids定义一个附加属性,该属性将使用过程代码来实现&#34;神奇地&#34;在添加行时迭代并应用所需的样式。然后,您只需要将这个附加属性添加到每个DataGrid实例,而不是所有那些详细的样式。