Почему сеттеры для триггера стиля не работают, когда кажется, что EnterActions функционирует - PullRequest
3 голосов
/ 25 февраля 2012

Я хочу, чтобы что-то случилось, когда окно фокусируется.Однако, похоже, это не сработает:

<Window x:Class="Sample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Background="Black"
        Opacity="0.5">
    <Grid>

    </Grid>
    <Window.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="Window.IsActive" Value="true">
                    <Setter Property="Control.Background" Value="Blue" />
                    <Setter Property="Window.Title" Value="Testing" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Style>

</Window>

С другой стороны, если я заменю сеттеры анимацией на {Enter,Exit}Action s, вещи, похоже, будут работать.1007 * Я полагаю, что этого обходного пути достаточно для моих целей, но я хотел бы понять, почему «простой» способ не работает.

PS Я не могу полностью заставить подсветку синтаксиса работать... Кажется, после нескольких уровней отступает.

1 Ответ

2 голосов
/ 25 февраля 2012

Если вы хотите переключить какое-либо значение свойства с помощью триггеров на основе какого-либо условия, вам нужно установить значение по умолчанию для этих свойств в самом стиле, иначе независимо от того, какие значения вы задали в своем установщике, значение свойств всегда будет переопределено локальные значения этих свойств из-за приоритета значения свойства зависимости .В вашем случае вам нужно установить значения Background и Title в вашем стиле следующим образом -

<Window x:Class="Sample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Opacity="0.5">
    <Grid>
    </Grid>
    <Window.Style>
        <Style>
            <Setter Property="Control.Background" Value="Black"/>
            <Setter Property="Window.Title" Value="Window1" />
            <Style.Triggers>
                <Trigger Property="Window.IsActive" Value="true">
                    <Setter Property="Control.Background" Value="Blue" />
                    <Setter Property="Window.Title" Value="Testing" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Style>
</Window>

Кроме того, вы можете опустить установку значения, пусть триггер установит для вас эти значения.Это также будет работать (фон и заголовок пропущены во время объявления окна) -

<Window x:Class="Sample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Opacity="0.5">
    <Grid>
    </Grid>
    <Window.Style>
        <Style>
            <Style.Triggers>
                <Trigger Property="Window.IsActive" Value="true">
                    <Setter Property="Control.Background" Value="Blue" />
                    <Setter Property="Window.Title" Value="Testing" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Style>
</Window>
...