使用 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>
在我的 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>