为继承的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

为继承的ContentControl元素分配一个ContentControl资源

您的要求有点奇怪,但可以通过多种方式实现…

而不是有另一个内容控制(即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"); 

让我知道这是否回答了你的问题。