WPF глобальный стиль TextBlock внутри DataGrid
я столкнулся с очень странной проблемой. Я пытаюсь применить глобальный стиль к нескольким элементам управления в 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
, etc.) работать правильно. - определение глобального стиля внутри
DataTemplate
будет работать должным образом. - непосредственно присвоение стиля
TextBlock
С помощьюx:Key
будет работа. - глобальные стили для
DataGridCell
используяTextElement.PROPERTY
будет применяться кTextBlock
.
в то время как некоторые из них будет применен стиль к TextBlock
, у них есть собственные проблемы. Прямое назначение стиля или определение стиля где-то в пределах DataGridColumn
будет означать, что мне придется применить стиль более одного раза. С помощью TextElement.PROPERTY
на DataGridCell
применить стиль больше, чем просто TextBlock
элементы управления и ограничат количество свойств это вы можете установить.
2 ответов
так что с немного больше копать и немного удачи, я обнаружил, что WPF не применяет неявные стили внутри шаблонов, если TargetType
происходит от Control
. С TextBlock
не является производным от Control
, его стиль не применяется. Таким образом, вы либо должны вручную применить стиль к каждому не-Control
или определите неявный стиль внутри шаблона.
следующее сообщение в блоге MSDN объясняет это довольно хорошо деталь.
к сожалению, как BrianP сказал, WPF не работает. Но можно установить свойства TextElement стиля ячейки следующим образом:
<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False" DockPanel.Dock="Top">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="TextElement.Foreground" Value="Green" />
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Test">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="not globably applied" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>