Действительно странная ситуация в 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?