【发布时间】:2016-06-18 12:21:42
【问题描述】:
我在让 DataTrigger 在 WPF 中调用 Storyboard 时遇到问题。我已经为此工作了将近 3 个小时,希望有人能提供帮助!
这是我的 XAML 片段,其中包含情节提要/触发器。
<Style x:Key="image" TargetType="{x:Type Image}">
<Style.Resources>
<Storyboard x:Key="LoadTitleScreen">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="image">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
<DiscreteObjectKeyFrame KeyTime="0:0:0.6" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsLoginWrong}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource LoadTitleScreen}"/>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
这是我设置 DataTrigger 属性值的 C# 代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private Boolean _isLoginWrong;
public Boolean IsLoginWrong
{
get { return this._isLoginWrong; }
set
{
if (value != this._isLoginWrong)
{
this._isLoginWrong = value;
NotifyPropertyChanged("IsLoginWrong");
}
}
}
Timer ConnectToServer = new Timer(3000);
public MainWindow()
{
InitializeComponent();
ConnectToServer.Elapsed += ConnectToServer_Elapsed;
ConnectToServer.Start();
}
void ConnectToServer_Elapsed(object sender, ElapsedEventArgs e)
{
IsLoginWrong = true;
}
}
【问题讨论】:
-
你需要实现INotifyPropertyChanged接口并在你的
IsLoginWrong设置器中调用NotifyPropertyChanged。 -
我已经更新了代码,但执行时 XAML 中仍然没有触发器。我已经给程序设置了断点,设置后 IsLoginWrong 的值为 true。还有什么想法吗?谢谢! @kyriacos_k
标签: c# wpf xaml storyboard datatrigger