模板化的 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;