在ViewModel中更改TextBlock的文本时运行动画

时间:2012-08-29 09:43:27

标签: wpf animation data-binding mvvm

我正在按照MVVM模式制作WPF应用程序。我有一个按钮和文本块。 TextBlock仅在其文本不为空时显示。在应用程序启动时,文本为空,不显示文本块。当我单击按钮时,将设置示例文本并显示文本块。当我再次点击时,按钮文本设置为空,文本块隐藏。

现在我想要的是,当设置文本时,开始动画(渐变)不透明度在5秒内从0变为1。

这是我的XAML

<TextBlock Text="{Binding StatusMessage}" Visibility="{Binding IsStatusMessageVisible}" />
<Button Content="UpdateText" Command="{Binding UpdateTextCommand}" />

这是我的ViewModel。

    private string _statusMessage;
    public string StatusMessage
    {
        get { return _statusMessage ?? (_statusMessage = string.Empty); }
        set
        {
            _statusMessage = value;
            NotifyOfPropertyChange(() => IsStatusMessageVisible);
            NotifyOfPropertyChange(() => StatusMessage);
        }
    }

    public System.Windows.Visibility IsStatusMessageVisible
    {
        get
        {
            return (string.IsNullOrEmpty(StatusMessage))
                ? System.Windows.Visibility.Collapsed
                : System.Windows.Visibility.Visible;
        }
    }

    public void UpdateText()
    {
        if (string.IsNullOrEmpty(StatusMessage))
            StatusMessage = Properties.Resources.WaitMessageStatus;
        else
            StatusMessage = string.empty;
    }

我只想在设置StatusMessage文本时动画运行。

2 个答案:

答案 0 :(得分:0)

请按照以下步骤操作:

  1. 在ViewModel中声明TextChanged事件
  2. 在StatusMessage属性的set方法中,在“_statusMessage = value;”行之前如果(_statusMessage!= value&amp;&amp;!string.IsNulOrEmpty(value));
  3. ,请提高TextChanged事件
  4. 在你的XAML中,创建一个StoryBoard来改变TextBlock的不透明度
  5. 在你的XAML中,向TextBlock添加一个ControlStoryBoardBehavior,并选择你的TextChanged事件和你的StoryBoard

答案 1 :(得分:0)

首先,摆脱你的viewmodel上的“Visibility”属性,它不属于那个......它应该是一个布尔值。然后,为TextBlock创建一个样式。在该样式中,添加DataTrigger以绑定到布尔“IsVisible”属性。 DataTrigger的新闻,创建一个故事板:

<DataTrigger.EnterActions>
    <BeginStoryboard>
        <Storyboard>
            <!--Animation code in here />
        </Storyboard>
    </BeginStoryboard>
</DataTrigger.EnterActions>

有关如何进行不透明度动画的示例,只需谷歌...但这里是one way