c# - 模板化的 FrameworkElement 无法从后面的代码中修改
问题描述
语境
我有一个重新定义在 FrameworkElement 上应用的 ControlTemplate 的样式。在给定事件上,我希望能够修改 ControlTemplate 内容的某些属性(来自后面的代码,而不是绑定)。
我在这里找到的这段代码需要FrameworkElement:来自代码的样式访问控制
FrameworkElement myTemplatedButton = this.Template.LoadContent() as FrameworkElement;
Ellipse ellipse = myTemplatedButton.FindName("SliderButton_ButtonControl") as Ellipse;
这似乎找到了我正在寻找的元素,因为我没有收到任何错误并且参考设置正确。
问题
但是,当我尝试像这样更新属性时
ellipse.Fill = Brushes.Red;
ellipse.Visibility = Visibility.Hidden;
我的应用程序没有任何变化,如果我在重新触发事件之前在代码中放置断点,我可以看到 Property Visibility(例如)已重置为 Visibility.Visible。
这就像应用程序在函数返回后立即覆盖我的更改,而我不知道为什么。
解决方案
LoadContent()
基于模板创建新元素。
如果要修改现有元素,则应调用FindName
此模板的方法:
Ellipse ellipse = myTemplatedButton.Template
.FindName("SliderButton_ButtonControl", myTemplatedButton) as Ellipse;
推荐阅读
- python - 使用 Flask, pymongo, cursor id 已经在使用中
- python - Flask SQLite3 临时数据库?
- linux - 如何从在线索引中获取 url 列表
- unity3d - 如何删除字符串中的一块
- r - 根据 R 中的逐月变化计算基础效应
- python - 获取包含相同字符串的元组列表
- html - 如何在表格的一个单元格中设置两个单元格?
- javascript - SyntaxError: 无效字符 '\ud835'
- angular - 使用 Angular 在 Nativescript 中弹出菜单
- rust - 为什么我的 TryFrom 实现没有
> 封面 TryFrom >?