Bry*_*tts 12 wpf wpfdatagrid c#-4.0
我遇到了一个非常奇怪的问题.我正在尝试将全局样式应用于a中的几个控件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>
Run Code Online (Sandbox Code Playgroud)
更多信息:
TextBlock
(TextBox
,ComboBox
,等)的正常工作.DataTemplate
将正常工作.TextBlock
使用x:Key
将工作.DataGridCell
使用样式TextElement.PROPERTY
将应用于TextBlock
.虽然其中一些将适用于该风格TextBlock
,但它们有自己的问题.直接指定样式或在a中某处定义样式DataGridColumn
意味着我将不止一次地应用样式.使用TextElement.PROPERTY
on DataGridCell
将将样式应用于不仅仅是TextBlock
控件,并将限制您可以设置的属性数.
因此,通过更多的挖掘和一点运气,我发现WPF不会在模板中应用隐式样式,除非TargetType
派生自Control
.由于TextBlock
不是源自Control
,其风格不适用.因此,您必须手动将样式应用于每个非样式Control
或定义模板内的隐式样式.
以下MSDN博客文章非常详细地解释了它.