我遇到了麻烦,我需要你的帮助。这是我的代码:
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,我想将资源“CircleRes”和样式“CircleStyle”分配给它。类似的东西:
this = (ContentControl)_parent.FindResource("CircleRes");
this.Style = (Style)_parent.FindResource("CircleStyle");
这件事是不允许的。为了解决这个问题,我实例化了ContentControl me元素;但是代码有点乱!如何让它更“优雅”???
提前致谢
保
答案 0 :(得分:0)
您的要求有点奇怪,但可以通过多种方式实现......
为什么不设置me
控件的内容本身而不是另一个内容控件(即this
)?
this.Content
= (ContentControl)_parent.FindResource("CircleRes");
((ContentControl)(this.Content)).Style
= (Style)_parent.FindResource("CircleStyle"); //*** Potential problem
问题:潜在问题陈述以这种方式标记,因为您的代码(以及我的代码)通过引用将样式"CircleStyle"
设置为"CircleRes"
资源。
如何? me
或((ContentControl)(this.Content))
只是"CircleRes"
资源!
这意味着如果"CircleRes"
在某个其他地方被引用,它将随身携带"CircleStyle"
作为自己的风格。如果您在其他地方设置了一些新的Style
到"CircleRes"
,那么它将覆盖 Style
"CircleRes"
使用的地方,包括上面的代码(预期的格式为"CircleStyle"
)
解决方案:改为使用ContentTemplate
。模板不会导致视觉实例引用。
所以实际上你应该有一个DataTemplate(比如说“CircleResTemplate”)并将其设置为ContentTemplate到CircleElement
类。
this.ContentTemplate
= (DataTemplate)_parent.FindResource("CircleResTemplate");
this.Style
= (Style)_parent.FindResource("CircleStyle");
如果这回答了你的问题,请告诉我。