【问题标题】:Issues with DataTrigger in WPFWPF 中的 DataTrigger 问题
【发布时间】: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


【解决方案1】:

IsLoginWrong 必须是一个依赖属性或实现 INotifyPropertyChanged 的​​属性,以便您的 Trigger 可以收到它已更改的通知。

如何实现INotifyPropertyChanged:https://msdn.microsoft.com/library/ms229614(v=vs.100).aspx

【讨论】:

  • 我已经实现了这个接口,但仍然没有触发器。我已经更新了上面的代码以反映更改。还是不行,还有什么办法吗?谢谢!
  • 抱歉耽搁了。你必须把 DataContext= this;在您的 MainWindow 构造函数中并从您的代码中删除 Storyboard.TargetName="image" 。我已经尝试过这些小改动,并且效果很好。
  • 我终于让它工作了!非常感谢您对此事的帮助。点个赞=D
  • 不客气,如果对您有帮助,请随时接受答案。干得好。
猜你喜欢
  • 2011-11-03
  • 2012-05-25
  • 2012-04-02
  • 2013-12-30
  • 1970-01-01
  • 2013-06-04
  • 2018-05-31
  • 2011-08-17
  • 2015-04-22
相关资源
最近更新 更多