问题描述
背景
我有一个样式重新定义了应用于 FrameworkElement 的 ControlTemplate。 在给定的事件中,我希望能够修改 ControlTemplate 内容的一些属性(从代码背后,而不是绑定)。
我在这里找到的这段代码需要 FrameworkElement:Access control in style from code
FrameworkElement myTemplatedButton = this.Template.LoadContent() as FrameworkElement;
Ellipse ellipse = myTemplatedButton.FindName("SliderButton_ButtonControl") as Ellipse;
这似乎找到了我正在寻找的元素,因为我没有收到任何错误并且参考设置良好。
问题
但是,当我尝试更新这样的属性时
ellipse.Fill = Brushes.Red;
ellipse.Visibility = Visibility.Hidden;
我的应用程序没有任何变化,如果我在重新触发事件之前在代码中放置一个断点,我可以看到属性可见性(例如)已重置为 Visibility.Visible。
就好像函数一返回,应用程序就覆盖了我的更改,而我不知道为什么。
解决方法
LoadContent()
根据模板创建新元素。
如果你想修改一个现有的元素,你应该调用这个模板的FindName
方法:
Ellipse ellipse = myTemplatedButton.Template
.FindName("SliderButton_ButtonControl",myTemplatedButton) as Ellipse;