将ContentControl资源分配给继承的ContentControl元素

时间:2011-09-14 07:13:34

标签: c# wpf

我遇到了麻烦,我需要你的帮助。这是我的代码:

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元素;但是代码有点乱!如何让它更“优雅”???

提前致谢

1 个答案:

答案 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"); 

如果这回答了你的问题,请告诉我。