0

我在 WPF Datagrid 的 DataGridTemplateColumn 中有 TextBlock。当我选中“IsEnable”false 以继承 DatagridTemplateColumn 内的文本块样式时。这是我正在使用的 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“IsEnabled”中的 Texblock 并继承样式的任何想法?

4

2 回答 2

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颜色。

于 2015-03-18T17:49:15.620 回答
0

除非 TargetType 从 Control 派生,否则 WPF 不会在模板内应用隐式样式。由于 TextBlock 不是从 Control 派生的,因此不会应用其样式。因此,您要么必须手动将样式应用于每个非控件,要么在模板中定义隐式样式。在 datagrid 资源中定义您的样式为

       <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>        
于 2015-06-06T18:07:35.047 回答