简体   繁体   English

将前景色绑定到控制的IsEnabled状态

[英]Bind foreground color to control's IsEnabled state

I'm having trouble binding the label color on my Microsoft.Windows.Controls.Ribbon.RibbonTab objects to their Enabled state. 我无法将Microsoft.Windows.Controls.Ribbon.RibbonTab对象上的标签颜色绑定到启用状态。

I tried the following first: 我先尝试了以下内容:

<Style TargetType="{x:Type r:RibbonTab}">
    <Setter Property="Foreground" Value="White" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsEnabled}" Value="False">
            <Setter Property="Foreground" Value="Gray" />
        </DataTrigger>
    </Style.Triggers>
</Style>

But it has no affect on the foreground. 但它对前景没有影响。 It looks like something in the ribbonTab library code is programatically overwriting the foreground. 看起来像ribbonTab库代码中的某些东西以编程方式覆盖前景。

I then tried this: 然后我尝试了这个:

<Style x:Key="BaseRibbonTabStyle" TargetType="{x:Type r:RibbonTab}">
    <EventSetter Event="IsEnabledChanged" Handler="RibbonTab_IsEnabledChanged" 
</Style>

private void RibbonTab_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
   if( (bool)e.NewValue == false )
       ((RibbonTab)sender).Foreground = (new System.Windows.Media.BrushConverter()).ConvertFromString("Gray") as System.Windows.Media.Brush;
   else
       ((RibbonTab)sender).Foreground = (new System.Windows.Media.BrushConverter()).ConvertFromString("White") as System.Windows.Media.Brush;
}

But that also failed with the following compile time error: 但是,由于以下编译时错误,也失败了:

System.Windows.UIElement.IsEnabledChanged="RibbonTab_IsEnabledChanged_Event" is not valid. 'IsEnabledChanged' must be a RoutedEvent registered with a name that ends with the keyword "Event".

How can I get this to work? 我怎样才能让它发挥作用?

Try a simple property trigger: 尝试简单的属性触发器:

 <Style TargetType="{x:Type r:RibbonTab}">
     <Style.Triggers>
         <Trigger Property="IsEnabled" Value="False">
             <Setter Property="Foreground" Value="Gray" />
         </Trigger>
     </Style.Triggers>
     <Setter Property="Foreground" Value="White" /> 
 </Style>

Did you try this: 你试过这个:

<Style TargetType="{x:Type r:RibbonTab}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsEnabled}" Value="False">
            <Setter Property="Foreground" Value="Gray" />
        </DataTrigger>
    </Style.Triggers>
    <Setter Property="Foreground" Value="White" />
</Style>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM