DataTrigger EnterActions не работает без установщика? - PullRequest
0 голосов
/ 14 февраля 2020

Действительно странная ситуация в WPF здесь ... Допустим, у нас есть следующий код в окне:

<Window.Resources>
    <Storyboard x:Key="In" Storyboard.TargetProperty="Opacity">
        <DoubleAnimation Duration="0:0:1" To="1"/>
    </Storyboard>
    <Storyboard x:Key="Out" Storyboard.TargetProperty="Opacity">
        <DoubleAnimation Duration="0:0:1" To="0"/>
    </Storyboard>
    <Style x:Key="style" TargetType="FrameworkElement">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=MainWin, Path=Checked}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard Storyboard="{StaticResource Out}"/>
                </DataTrigger.EnterActions>
                <DataTrigger.ExitActions>
                    <BeginStoryboard Storyboard="{StaticResource In}"/>
                </DataTrigger.ExitActions>
                <!--<Setter Property="Tag" Value="{x:Null}"/>-->
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock" BasedOn="{StaticResource style}"/>
    </StackPanel.Resources>

    <CheckBox Content="CheckBox bound to MainWindow.Checked property"
              IsChecked="{Binding ElementName=MainWin, Path=Checked}"/>
    <TextBlock Text="Tick above should hide me"/>
</StackPanel>

И в MainWindow.cs есть свойство зависимости с именем Checked. Просто и просто:

public bool Checked {
    get { return (bool)GetValue(CheckedProperty); }
    set { SetValue(CheckedProperty, value); }
}
public static readonly DependencyProperty CheckedProperty =
    DependencyProperty.Register("Checked", typeof(bool), typeof(MainWindow), new PropertyMetadata(false));

В основном TextBlock должен скрываться при проверке CheckBox. НО ...

Приведенный выше код не работает, если я не раскомментирую Setter для Tag! (На самом деле это не обязательно должен быть тег, но подойдет любой сеттер.)

И работает без комментария, если установить Style непосредственно в TextBlock следующим образом:

    <TextBlock Text="Tick above should hide me" Style="{StaticResource style}"/>

Может кто-нибудь объяснить это странное поведение? Я испытываю какую-то ошибку в Framework?

...