模板化的 FrameworkElement 不可能从后面的代码修改
Templated FrameworkElement impossible to modify from code behind
上下文
我有一个样式重新定义了应用于 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.
这就像应用程序在函数 returns 后立即覆盖我的更改,我不知道为什么。
LoadContent()
基于模板创建 new 元素。
如果你想修改一个已经存在的元素,你应该调用这个模板的FindName
方法:
Ellipse ellipse = myTemplatedButton.Template
.FindName("SliderButton_ButtonControl", myTemplatedButton) as Ellipse;
上下文
我有一个样式重新定义了应用于 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.
这就像应用程序在函数 returns 后立即覆盖我的更改,我不知道为什么。
LoadContent()
基于模板创建 new 元素。
如果你想修改一个已经存在的元素,你应该调用这个模板的FindName
方法:
Ellipse ellipse = myTemplatedButton.Template
.FindName("SliderButton_ButtonControl", myTemplatedButton) as Ellipse;