【发布时间】:2012-03-09 17:53:06
【问题描述】:
我在将我的 Microsoft.Windows.Controls.Ribbon.RibbonTab 对象上的标签颜色绑定到其启用状态时遇到问题。
我先尝试了以下方法:
<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>
但它对前景没有影响。看起来ribbonTab 库代码中的某些内容以编程方式覆盖了前景。
然后我尝试了这个:
<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;
}
但这也因以下编译时错误而失败:
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".
我怎样才能让它工作?
【问题讨论】:
-
那个绑定在我看来刚刚被打破,你甚至在
ControlTemplate的上下文中吗?你知道TemplatedParent是如何工作的吗?有binding errors吗?
标签: c# wpf xaml .net-4.0 styles