所以,我有一些控件的窗口。在资源部分,我定义这个风格:为什么这个DataTrigger改变基于祖先附属属性的元素样式不起作用?
<Style x:Key="StyleNavBar" TargetType="{x:Type Grid}">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentTheme, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
<DataTrigger.Value>
<theme:WinTheme>WindowsClassic</theme:WinTheme>
</DataTrigger.Value>
<Setter Property="Background" Value="#FFFFFFFF" />
</DataTrigger>
</Style.Triggers>
</Style>
在我的窗口,我定义了一个名为哪些商店(基于ENUM)当前主题使用的系统范围内的“CurrentTheme”附加属性。下面的代码:
public static readonly DependencyProperty CurrentSystemThemeProperty =
DependencyProperty.RegisterAttached(
"CurrentSystemTheme",
typeof(WinTheme),
typeof(MainWindow),
new UIPropertyMetadata(WinTheme.AeroGlass));
public WinTheme CurrentTheme
{
get
{
return (WinTheme)GetValue(CurrentSystemThemeProperty);
}
set
{
SetValue(CurrentSystemThemeProperty, value);
}
}
每当用户改变系统主题,我通过窗口的WndProc收到回调,通知该主题已经改变。而且,如您所见,CurrentTheme属性的默认值是WinTheme.AeroGlass。然后我在上面定义的样式风格的网格:
<Grid Height="34" Name="grdNavBar" VerticalAlignment="Top" Style="{DynamicResource StyleNavBar}">
我的目标是改变基于CurrentTheme价值的风格,但上述定义的触发时主题更改(只与工作不工作CurrentTheme的默认值,即不对属性的变化作出反应)。
有关如何完成此任何想法?
谢谢,伊恩。多么愚蠢的错误:)。它现在有效。并感谢提示。 – EdMelo 2010-11-17 01:22:44