我遇到了一个非常奇怪的问题。我正在尝试将全局样式应用于DataGrid
. 他们中的大多数人完全按照我的期望工作。但是,TextBlock
永远不会应用的样式。ComboBox
, TextBox
,和其他几个样式Label
都被应用于各自的控件,但不是TextBlock
. 我已经尽可能地简化了代码,问题仍然存在。我在下面提供了代码示例。
我需要将样式应用于TextBlock
并且我不想手动将其应用于TextBlock
.
<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False">
<DataGrid.Resources>
<Style TargetType="TextBlock">
<Setter Property="ANY_TEXTBLOCK_PROPERTY" Value="VALUE" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="Globably Applied" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
更多信息:
TextBlock
(TextBox
,ComboBox
等)以外的任何控件的全局样式都可以正常工作。- 在内部定义全局样式
DataTemplate
将正常工作。 - 直接将样式分配给
TextBlock
usingx:Key
将起作用。 DataGridCell
使用的全局样式TextElement.PROPERTY
将应用于TextBlock
.
虽然其中一些会将样式应用于 . TextBlock
,但它们也有自己的问题。直接指定样式或在 a 中的某处定义样式DataGridColumn
意味着我将不得不多次应用该样式。使用TextElement.PROPERTY
onDataGridCell
将样式应用到的不仅仅是TextBlock
控件,并且会限制您可以设置的属性数量。