为继承的ContentControl元素分配一个ContentControl资源
本文关键字:ContentControl 一个 资源 分配 继承 元素 | 更新日期: 2023-09-27 18:08:26
我遇到麻烦了,需要你的帮助。下面是我的代码:
public class CircleElement : ContentControl
{
public ContentControl me;
private FrameworkElement _parent;
public CircleElement()
{
if (_parent != null)
{
me = (ContentControl)_parent.FindResource("CircleRes");
me.Style = (Style)_parent.FindResource("CircleStyle");
}
}
CircleElement继承了ContentControl,我想给它分配资源"circlees"和样式"CircleStyle"。比如:
this = (ContentControl)_parent.FindResource("CircleRes");
this.Style = (Style)_parent.FindResource("CircleStyle");
这个东西是不允许的。为了解决这个问题,我实例化了ContentControl元素;但是代码有点乱!!如何让它更"优雅"??
Thanks in advance
。
您的要求有点奇怪,但可以通过多种方式实现…
而不是有另一个内容控制(即me
)为什么不设置this
控制的内容本身?
this.Content
= (ContentControl)_parent.FindResource("CircleRes");
((ContentControl)(this.Content)).Style
= (Style)_parent.FindResource("CircleStyle"); //*** Potential problem
Problem:潜在的问题语句以这种方式标记,因为您的代码(和我的代码)通过引用将样式"CircleStyle"
设置为"CircleRes"
资源。
如何?me
或((ContentControl)(this.Content))
只是"CircleRes"
的资源!
这意味着如果"CircleRes"
在其他地方被引用,它将携带"CircleStyle"
作为它自己的样式。如果你在其他地方设置了一些新的Style
为"CircleRes"
,那么它将覆盖 "CircleRes"
的Style
,包括上面的代码(其中预期的样式是"CircleStyle"
)
解决方案:使用ContentTemplate
代替。模板不会通过实例引用导致可视化。
所以实际上你应该有一个DataTemplate(说"CircleResTemplate"),并设置为ContentTemplate为CircleElement
类。
this.ContentTemplate
= (DataTemplate)_parent.FindResource("CircleResTemplate");
this.Style
= (Style)_parent.FindResource("CircleStyle");
让我知道这是否回答了你的问题。