模板化的 FrameworkElement 无法从背后的代码中修改

问题描述

背景

我有一个样式重新定义了应用于 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;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...