gpt4 book ai didi

wpf - 尝试在 WPF 应用程序中更改属性时开始 Storyboard

转载 作者:行者123 更新时间:2023-12-03 13:17:53 26 4
gpt4 key购买 nike

我有一个简单的 MVVM 应用程序。它包含一个属性,当方法正确执行时,我将其更改为 true,如果现在执行,则更改为 false。当此属性更改时,我想在 WPF 应用程序的状态栏上显示“通过”或“失败”几秒钟,然后让它消失。

所以我已经阅读了 StackOverflow,并用谷歌搜索了很多,但无济于事。我想我误解了我需要如何构建 Storyboard。

在我的状态栏中,我添加了一个 Storyboard,我试图在 XAML 文件的开头在 <UserControl.Resources> 中触发它。这样对吗 ?目前我使用的是 0/1 的虚拟值,我认为正确的做法是使用我可以制作的 BooleanToString 转换器,或者也许有更好的方法?

所以我的状态栏包含:

<StatusBar >
<StatusBar.Resources>
<Storyboard x:Key="StatusBar" >
<DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty="(UIElement.Opacity)"
Storyboard.TargetName="statusBarItem">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:4" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</StatusBar.Resources>
</StatusBar>

我正在尝试注册以在我的 UserControl.Resources 中调用它:










我的结构是否完全倒退?它不会编译,我收到错误:
A value of type 'BeginStoryboard' cannot be added to a collection or dictionary of type 'SetterBaseCollection'. 

任何帮助、资源或信息将不胜感激。非常感谢。

最佳答案

这是一个例子。您需要使用触发器来启动 Storyboard。

<Grid>
<Grid.DataContext>
<WpfApplication1:MainViewModel/>
</Grid.DataContext>

<Grid.Resources>
<Style x:Key="statusStyle" TargetType="StatusBar">
<Setter Property="Opacity" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Pulse}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames
AutoReverse="True"
Storyboard.TargetProperty="(UIElement.Opacity)" >
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:3" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:4" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>

<StatusBar Style="{StaticResource statusStyle}"
Grid.Row="1" ItemsSource="{Binding Items}" />
<CheckBox Content="CheckBox" Height="16"
HorizontalAlignment="Left" Margin="41,30,0,0"
IsChecked="{Binding Pulse}" VerticalAlignment="Top" />
</Grid>

查看模型
public class MainViewModel : ViewModelBase
{
private bool _pulse;

public MainViewModel()
{
Items = new[] {"Passed"};
}

public IList<string> Items { get; private set; }

public bool Pulse
{
get { return _pulse; }
set { Set(()=>Pulse, ref _pulse, value); }
}
}

关于wpf - 尝试在 WPF 应用程序中更改属性时开始 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031895/

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