我在WPF Datagrid的DataGridTemplateColumn中有TextBlock。当我检查“IsEnable”为false时,继承DatagridTemplateColumn中的Textblock样式。这是我正在使用的XAML代码:
<Style TargetType="{x:Type DataGrid}" >
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGrid }">
<ControlTemplate.Resources >
<Style TargetType="{x:Type TextBlock }">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
</ControlTemplate.Resources>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这不起作用,后来我尝试了:
<Style TargetType="TextBlock" >
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
</Style.Triggers>
</Style>
关于如何检查Datagrid中的Texblock是否为“IsEnabled”并继承Style?的任何想法。
答案 0 :(得分:0)
我假设您正在尝试根据TextBlock的IsEnabled状态切换前景色。
你在哪里设置IsEnabled = true前景颜色?您还没有给出要设置样式的实际TextBlock的代码。
试试这个:
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Foreground" Value="Red" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Green" />
</Trigger>
</Style.Triggers>
</Style>
如果这不起作用,则意味着您的Textblock定义在哪里,您正在这样做 -
<TextBlock .... Foreground="SomeColor" />
并且您需要直接在TextBlock上删除Foreground设置,以便可以通过样式设置Foreground颜色。
答案 1 :(得分:0)
除非TargetType派生自Control,否则WPF不会在模板中应用隐式样式。由于TextBlock不是从Control派生的,因此不会应用其样式。因此,您必须手动将样式应用于每个非Control,或者在模板内定义隐式样式。 将数据网格资源中的样式定义为
<DataGrid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>