gpt4 book ai didi

WPF MVVM - 属性更改触发 Storyboard 仅发生一次

转载 作者:行者123 更新时间:2023-12-03 10:32:42 24 4
gpt4 key购买 nike

在我的 View 模型中,我有一个计时器,需要让边框背景每 5 分钟闪烁一次。

我认为的边界:

<Border Name="btnBorder" Grid.Row="0" Grid.Column="0" Opacity="1" CornerRadius="10,10,0,0">
<Border.Style>
<Style TargetType="Border">
<Style.Setters>
<Setter Property="Background" Value="#e2e2e2"></Setter>
</Style.Setters>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ViewEventTrigger}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="00:00:00.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:00.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:01.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:01.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:02.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:02.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:03.000" Value="#e2e2e2"/>
<EasingColorKeyFrame KeyTime="00:00:03.500" Value="#163f6b"/>
<EasingColorKeyFrame KeyTime="00:00:04.000" Value="#e2e2e2"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>

View 模型的属性:
private string _viewEventTrigger = "";
public string ViewEventTrigger
{
get => _viewEventTrigger ?? (_viewEventTrigger = "");
private set
{
if (_viewEventTrigger == value)
return;

_viewEventTrigger = value;
OnPropertyChanged();
}
}

以及需要触发的方法……好吧,触发:
private void ShowInfocenterIfAnyItinirary(object sender, ElapsedEventArgs e)
{
ViewEventTrigger = "";
ViewEventTrigger = "True";
}

我通过使用 MouseEnter 触发 Storyboard 来测试它。但是我无法通过将其绑定(bind)到我的属性(property)来使其工作。

编辑:

我这样设置数据上下文:
d:DataContext="{d:DesignInstance local:ItineraryViewModel}"

此外,我还有很多其他可以正常工作的数据绑定(bind),例如要显示的数据和按钮的命令。但我就是不能让触发器执行 Storyboard 。

方法 ShowInfocenterIfAnyItinirary()由计时器执行,在 View 模型中启动。

定时器代码:
private readonly Timer _timer = new Timer();
public ItineraryViewModel()
{
_timer.Interval = 5000;
_timer.Elapsed += ShowInfocenterIfAnyItinirary;
_timer.Start();
}

编辑 2:

我延迟了程序运行时动画应该开始的时间。我发现动画确实会运行,但只运行一次。我以前没有看到它,因为窗口开始最小化。

为什么不管触发事件发生多少次,它只运行一次?

最佳答案

这仅设置设计时数据上下文:

d:DataContext="{d:DesignInstance local:ItineraryViewModel}"

当您实际运行应用程序时,这不会有任何影响。

您应该设置 DataContext View 的属性到您的 View 模型的实例:
<Window ...>
<Window.DataContext>
<local:ItineraryViewModel />
</Window.DataContext>

关于WPF MVVM - 属性更改触发 Storyboard 仅发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com