原文: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>

这样就可以完美解决了。

最新文章

  1. spring mvc参数绑定
  2. 创建 XMLHttpRequest 对象
  3. 惊鸿一瞥(Glimpse)&mdash;&mdash;开发之时即可掌控ASP.NET应用的性能
  4. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结
  5. C# - 定义集合,索引符
  6. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
  7. Eclipse+Maven创建webapp项目&lt;二&gt; (转)
  8. Bounding-box 回归
  9. iOS中的两种搜索方式UISearchDisplayController和UISearchController
  10. capwap学习笔记——初识capwap(三)(转)
  11. zabbix监控ssl证书到期时间
  12. 《React Native 精解与实战》书籍连载「React 与 React Native 简介」
  13. bzoj1208splay模板题
  14. akuna capital oa
  15. python爬虫(三)
  16. vue双向绑定原理分析
  17. 【linux】——ubuntu12.04 下安装wine和wine乱码解决方案
  18. ubunto 16.04 lts 源
  19. [leetcode]Binary Tree Zigzag Level Order Traversal @ Python
  20. Generics Variance

热门文章

  1. 9、Node.js Stream(流)
  2. 翻译-QPKG开发工具快速开始指南
  3. select下拉的绑定及回显(ajxa)
  4. 【[HEOI2016/TJOI2016]字符串】
  5. JSP基本指令
  6. vlc源码分析(四) 调用libts接收TS流
  7. 【问题解决】增加https后 phpcms 分页错误
  8. 处理Model
  9. 【leetcode】804
  10. canvas转img,blob相互转换