WPF如何后台改变动画触发器绑定值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF如何后台改变动画触发器绑定值相关的知识,希望对你有一定的参考价值。

一个播放器按钮,播放和暂停是同一个按钮
但是xaml实在是不方便啊
部分xaml代码如下:
<Storyboard x:Key="Board" CurrentTimeInvalidated="Storyboard_CurrentTimeInvalidated" SlipBehavior="Slip">
<MediaTimeline Source="xx.mp3" Storyboard.TargetName="media" x:Name="mediaTime"></MediaTimeline>
</Storyboard>

<Window.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="按钮名">
<EventTrigger.Actions>
<BeginStoryboard Name="mediaStoryBoard" Storyboard="StaticResource Board" ></BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Window.Triggers>

可以看到触发器与按钮的Click事件绑定了,两个按钮自然什么事都没有,纯xaml都能搞定,但是我如何根据这一个按钮的状态来判断何时为暂停,何时继续呢?麻烦高手给出后台代码,或者有其他的好办法也行。谢谢!
暂停和继续的问题解决了,但是该播放器在打开时我不想让它自动播放mp3,仍想通过该按钮点击实现,问题出现了,ToggleButton和动画的绑定事件只有Checked和UnChecked,但是最开始的播放等同于重新播放,而不是播放或暂停这两个状态,也就是说有3个状态,这样一来就不行了,还有就是感觉绑定事件不太灵活啊,能否绑定属性啊,或者如何自定义事件

EventTrigger 的 Actions 不是 Action, Actions 可支援多个 Action
ToggleButton 在 Loaded 事件先 BeginStoryboard 然后立即暂停
RoutedEvent="ToggleButton.Loaded // 预播放, 立即暂停
<BeginStoryboard ... ...// 就是想得到一个名字
<PauseStoryboard ...
RoutedEvent="ToggleButton.Checked // 继续播放
<ResumeStoryboard ...
RoutedEvent="ToggleButton.Unchecked // 暂停
<PauseStoryboard...

-------------------------------
另外, ToggleButton 支持 3 态 (通过 IsThreeState 设定): Checked/Unchecked/Indeterminate
其 IsChecked 属性对应值是 True/False/Null, 此属性类型为 bool?
所以还有一个事件: ToggleButton.Indeterminate
参考技术A 最简单的办法,你用换用ToggleButton,写两个Trigger,Event分别为Checked和Unchecked
然后改改样式,看上去是播放和暂停即可。无需写cs代码
参考技术B 你可以尝试 使用MEDIAELEMENT 控件来 播放MP3 文件 你在界面上画一个MEDIAELEMENT放在最底层 OPACITY设置为0 之后NAME属性设置为mediaelement1
在TOGGLEBUTTON 的 CHECKED事件里写{this.mediaelement1.Play();}UNCHECKED事件里写{this.mediaelement1.Pause();} 这样CHECKED 的时候播放 UNCHECKED的时候 暂停 而且再次点击 的时候可以继续播放

WPF 利用后台C#代码实现一个平移动画。!!!

用后台C#实现。。。传入个参数 ,然后根据参数值向左平移响应的数值
例如传入10 Image就向左平移10.。。。

参考技术A 很简单的,只需要把位置改变下就好了,动画的话,就要用动画元素了。 参考技术B 这个简单
Storyboard s = new Storyboard();
DoubleAnimationUsingKeyFrames d = new DoubleAnimationUsingKeyFrames();
d.KeyFrames.Add(new LinearDoubleKeyFrame(30,KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.6))));
d.KeyFrames.Add(new LinearDoubleKeyFrame(变动终值, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.8))));
s.Children.Add(d);
Storyboard.SetTargetName(d, 目标名);
Storyboard.SetTargetProperty(d, new PropertyPath(Canvas.LeftProperty));
s.Begin(bor);

中间那个d是加了关键帧了,我就不摘出来了,不喜欢关键帧去点就行了本回答被提问者采纳

以上是关于WPF如何后台改变动画触发器绑定值的主要内容,如果未能解决你的问题,请参考以下文章

Zara带你快速入门WPF---触发器篇

element-ui 点击编辑弹出dialog组件中select组件绑定值改变,但是不触发change事件

WPF 触发器绑定:将枚举值绑定到可见性的最佳方法是啥?

Wpf 后台代码 怎么设置datagrid 某一行的背景色

wpf中datagrid选择改变事件中怎样绑定RadioButton的数据

wpf,后台触发按钮点击以及拖动