在窗口活动属性-WPF上更新标签的前景

时间:2010-06-09 06:52:28

标签: wpf

我有一个标签,显示窗口的名称。我想使用样式和触发器更新窗口的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>

2 个答案:

答案 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主题)。