使用 Caliburn.Micro 绑定时 StatusBar 文本淡出

StatusBar text fade-out when binding using Caliburn.Micro

在我的 ShellViewModel 中,我有以下 属性:

private string _status = "";
public string Status
{
    get
    {
        return _status;
    }
    set
    {
        _status = value;
        NotifyOfPropertyChange(() => Status);
    }
}

在 ShellView 中,我将我的 StatusBar TextBlock 命名为 "Status",以便它使用 Caliburn.Micro 绑定到上面 - 它确实如此。

然后我尝试添加一个 "StoryBoard" 元素,这样文本会在短时间后消失 - 当前文本出现但不会消失 - 我该如何解决这个问题?

<StatusBar DockPanel.Dock="Bottom">

  <TextBlock x:Name="Status">
    <TextBlock.Triggers>
      <EventTrigger RoutedEvent="Binding.TargetUpdated">
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation Storyboard.TargetProperty="Opacity"
                              Duration="0:0:0"
                              To="1.0" />
            <DoubleAnimation Storyboard.TargetProperty="Opacity"
                              Duration="0:0:2"
                              From="1.0"
                              To="0.0"
                              BeginTime="0:0:5" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
    </TextBlock.Triggers>
  </TextBlock>

</StatusBar>

您需要进行两项更改,

首先,您需要更新绑定以在 属性 更改时引发 TargetUpdated 事件。这可以使用 Binding.NotifyOnTargetUpdated

来完成
<TextBlock Text="{Binding Status, NotifyOnTargetUpdated=True}">

然后,你的BeginTime高于第二个动画(BeginTime="0:0:5")中的Duration,需要更正。

<DoubleAnimation Storyboard.TargetProperty="Opacity"
                              Duration="0:0:2" From="1.0" To="0.0" BeginTime="0:0:0.5" />

完整代码

<TextBlock Text="{Binding Status, NotifyOnTargetUpdated=True}">
                <TextBlock.Triggers>
                    <EventTrigger RoutedEvent="Binding.TargetUpdated">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity"
                              Duration="0:0:0" To="1.0" BeginTime="0:0:0.5"/>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity"
                              Duration="0:0:2" From="1.0" To="0.0" BeginTime="0:0:0.5" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
            </TextBlock.Triggers>
   </TextBlock>