1

我正在按照 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 文本时运行动画。

4

2 回答 2

0

首先,摆脱视图模型上的“可见性”属性,它不属于那里......它应该是一个布尔值。然后,为您的TextBlock. 在该样式中,添加DataTrigger以绑定到布尔“IsVisible”属性。在 的内部DataTrigger,创建一个故事板:

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

有关如何制作不透明动画的示例,只需谷歌即可...但这是一种方法

于 2012-08-29T12:12:59.457 回答
0

按着这些次序:

  1. 在 ViewModel 中声明一个 TextChanged 事件
  2. 在 StatusMessage 属性的 set 方法中,在“_statusMessage = value;”行之前 if (_statusMessage != value && !string.IsNulOrEmpty(value));
  3. 在您的 XAML 中,创建一个 StoryBoard 以更改 TextBlock 的不透明度
  4. 在 XAML 中,将 ControlStoryBoardBehavior 添加到 TextBlock,然后选择 TextChanged 事件和 StoryBoard
于 2012-08-29T10:09:29.180 回答