有没有办法让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>
任何建议表示赞赏。感谢
答案 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实例,而不是所有那些详细的样式。