我有一个标签,显示窗口的名称。我想使用样式和触发器更新窗口的IsActive属性上的标签颜色,以便继承此样式的所有标签应显示相同的属性。请有人建议我怎么做?
我试过这样:
<Style TargetType="{x:Type Label}" x:Key="HeaderLabel">
<Style.Triggers>
<DataTrigger Binding="{Binding (Window.IsActive)}" Value="True">
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</DataTrigger>
<DataTrigger Binding="{Binding (Window.IsActive)}" Value="False">
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</DataTrigger>
</Style.Triggers>
</Style>
答案 0 :(得分:1)
在DataTrigger中尝试此绑定:
Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=IsActive}"
答案 1 :(得分:0)
通过显示窗口名称的标签,你的意思是窗口标题栏上的那个?或其他什么?
如果是后者,那么您可以设置标签的默认样式,并且只使用一个触发器来处于非活动状态。还要确保标签的datacontext中有Window
。它应该是这样的(没有检查):
<Style TargetType="{x:Type Label}" x:Key="HeaderLabel">
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Style.Triggers>
<DataTrigger Binding="{Binding (Window.IsActive)}" Value="False">
<Setter Property="FontSize" Value="15"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</DataTrigger>
</Style.Triggers>
</Style>
如果您想更改标题栏,我认为最简单的方法是完全覆盖窗口样式(适用于所有Windows主题)。