我有麻烦了,我需要你的帮助。下面是我的代码:
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");这个东西不是allowable.So为了解决这个问题我实例化了ContentControl me元素;但是代码有点乱!!如何让它变得更“优雅”?
提前感谢
保罗
发布于 2011-09-14 16:14:19
你的要求有点奇怪,但它可以通过多种方式实现……
为什么不设置this控件的内容本身,而不是拥有另一个内容控件(即me)呢?
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,那么它将覆盖使用Style of "CircleRes"的任何地方,包括上面的代码(其中预期的样式是"CircleStyle")
Solution:改用ContentTemplate。模板不会导致可视化的按实例引用。
因此,实际上您应该有一个类(比如"CircleResTemplate"),并将其设置为ContentTemplate to CircleElement类。
this.ContentTemplate
= (DataTemplate)_parent.FindResource("CircleResTemplate");
this.Style
= (Style)_parent.FindResource("CircleStyle"); 如果这回答了你的问题,请让我知道。
https://stackoverflow.com/questions/7412553
复制相似问题