【发布时间】:2021-05-14 14:05:33
【问题描述】:
上下文
我有一个样式重新定义了在 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;
我的应用程序没有任何变化,如果我在重新触发事件之前在代码中放置断点,我可以看到 Property Visibility(例如)已重置为 Visibility.Visible。
这就像应用程序在函数返回后立即覆盖我的更改,我不知道为什么。
【问题讨论】:
-
LoadContent()基于模板创建新元素。你想改变什么特定元素的外观? -
好吧,如果不发布大量代码,很难准确地说出来,但如果它创建一个新实例,这就解释了为什么我的修改对程序没有任何改变。你知道我怎样才能得到应用到
myTemplatedButton的样式中定义的实际“SliderButton_ButtonControl”吗? -
请看我的回答。
标签: c# wpf xaml code-behind frameworkelement