原文:WPF ControllTemplate Triggers小记 - 简书

WPF中,样式模板中如果定义EventTrigger事件方式实现动画。那么需要注意两点:

1、对于绑定的属性的EventTrigger,绑定值不能有更改。例如,ToggleButton.Checked和ToggleButton.UnChecked定义了EventTrgger,实现选中的BeginStoryboard动画,那么在引用的该样式的ToggleButton,xaml中绑定,IsChecked="{Binding IsChecked}"。当IsChecked的值不是默认值(false)时将在构造窗口时抛出异常:在“System.Windows.Controls.ControlTemplate”的名称领域内找到“xxx”名称。”

我曾试过在构造函数,执行,延时架在你时绑定:

尝试1

App.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.SystemIdle, new Action(() => {
btnMuted.SetBinding(ToggleButton.IsCheckedProperty, new Binding("IsChecked") { Source = accountViewModel.AppViewModel.SettingsView });
}));

调节多次调度程序为,Load,ApplicationIdle等均抛出异常。

尝试2:

Task.Run(new Action(()=> {
Thread.Sleep(100);
App.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.SystemIdle, new Action(() => {
btnMuted.SetBinding(ToggleButton.IsCheckedProperty, new Binding("IsChecked") { Source = accountViewModel.AppViewModel.SettingsView });
}));
}));

当Sleep时间充足时(取决系统响应),可正常工作。

尝试3:

btnMuted.Loaded += (o, e)=>{
btnMuted.SetBinding(ToggleButton.IsCheckedProperty, new Binding("IsChecked") { Source = accountViewModel.AppViewModel.SettingsView });
};

这样也是可行的

尝试4:

IsChecked="{Binding AppViewModel.SettingsView.IsChecked, Delay=3000}"

通过增加绑定变化的延时时间,但是结果是无效的

但这不是我们想要的结果对于MVVM模式,再去写这样的代码显得略微繁重。

2、我们可以使用 Trigger代替,避免使用EventTrigger

例如:

<ControlTemplate.Triggers>
<!--<EventTrigger RoutedEvent="ToggleButton.Checked">
<BeginStoryboard Storyboard="{StaticResource OnChecked1}"/>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked">
<BeginStoryboard x:Name="OnUnchecked1_BeginStoryboard" Storyboard="{StaticResource OnUnchecked1}"/>
</EventTrigger>-->
<Trigger Property="IsChecked" Value="True">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource OnChecked1}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard x:Name="OnUnchecked1_BeginStoryboard" Storyboard="{StaticResource OnUnchecked1}"/>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>

这样就可以完美解决了。

WPF ControllTemplate Triggers小记 - 简书的更多相关文章

  1. WPF 任务栏颜色 - 简书

    原文:WPF 任务栏颜色 - 简书 先看看效果,这种效果可以用来做进度条或者消息通知闪烁.   image.png   image.png   image.png   image.png 有一个好消息 ...

  2. WPF RoutedEvent and HitTest - 简书

    原文:WPF RoutedEvent and HitTest - 简书 学习的时候切忌心浮气躁,慢慢的过每一个知识点,不要漏掉任何细节.不然当遇到细节问题的时候,会恼,会闹,会悔不该当初--花一下午调 ...

  3. WPF 动画:同为控件不同命 - 简书

    原文:WPF 动画:同为控件不同命 - 简书 1. 及格与优秀 读大学的时候,有一门课的作业是用 PPT 展示. 但是我们很多同学都把 PPT 当做 Word 来用,就单纯地往里面堆文字. 大家都单纯 ...

  4. WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

  5. WPF使用IDataErrorInfo接口进行数据校验 - 简书

    原文:WPF使用IDataErrorInfo接口进行数据校验 - 简书 class ValidationBindableBase : BindableBase, IDataErrorInfo { pu ...

  6. WPF之路-键盘与鼠标事件 - 简书

    原文:WPF之路-键盘与鼠标事件 - 简书 键盘事件 事件类型分为以下几个类型 生命周期事件:在元素加载与卸载的时候发生 鼠标事件:鼠标动作 键盘事件:键盘动作 手写笔事件:适用于win7以上的系统 ...

  7. c#字符串加载wpf控件模板代码 - 简书

    原文:c#字符串加载wpf控件模板代码 - 简书 ResourceManager resManagerA = new ResourceManager("cn.qssq666.Properti ...

  8. WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书

    原文:WPF中Popup控件在Win7以及Win10等中的对齐点方式不一样的解决方案 - 简书 最近项目中使用弹出控件Popup,发现弹出框的对齐方式在不同的系统中存在不同(Popup在win10上是 ...

  9. WPF系列教程——(三)使用Win10 Edge浏览器内核 - 简书

    原文:WPF系列教程--(三)使用Win10 Edge浏览器内核 - 简书 在需要显示一些 H5网站的时候自带的WebBrowser总是显示不了,WebBrowser使用的是IE内核,许多H5新特性都 ...

随机推荐

  1. iOS--性能优化--保持界面流畅

    卡顿产生的原因和解决方案 在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建.布局计算.图片解 ...

  2. 苹果浏览器样式重置submit

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/XTQueen_up/article/details/34446541 大家刚接触写手机页面 也许都会 ...

  3. Django的时区设置问题

    1.Django的时区问题 django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题.之前程序在测试时是运行 ...

  4. 【LGP5108】仰望半月的夜空

    题目 我还会写\(SA\)和 \(ST\)表真是令人感动 发现这是一个思博题 我们开一个指针,标记一下当前合法的字典序最小的后缀排名在哪里,刚开始自然是\(1\) 我们发现这个后缀不能为我们提供\(i ...

  5. 【[HEOI2016/TJOI2016]序列】

    压行真漂亮 首先这肯定是一个\(dp\)了 设\(dp_i\)表示\(i\)结尾的最长不下降子序列的长度 显然我们要找一个\(j\)来转移 也就是\(dp_i=max(dp_j+1)\) 那么什么样的 ...

  6. 贪心——HDU-5969 最大的位或

    HDU-5969:http://acm.hdu.edu.cn/showproblem.php?pid=5969 一开始也是分了类,觉得要两种情况,l 与 r 位数相同与不同的情况,仔细想一下,可以一起 ...

  7. [Python 网络编程] TCP、简单socket模拟ssh (一)

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 网络进程访问应用层: 为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务: 提供用户身份 ...

  8. spring boot项目中使用sfl4j+logbak配置

    1.pom.xml文件 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api& ...

  9. SpringMVC整合FreeMarker实例

    FreeMarker作为模板引擎,是比较常用的. FreeMarker官方文档地址为:https://freemarker.apache.org/ 现在浏览器或者翻译工具这么多,对于英文方面,我想大多 ...

  10. PHP一个表单多个提交按钮解决方法

    1.html页面<注:多个按钮的name值必须相同> <form action="{:U('Index/index')}" method="post&q ...