在Silverlight中继承控件时,如何确定其模板是否已应用?

在Silverlight中继承控件时,如何确定其模板是否已应用?,silverlight,inheritance,controls,lifecycle,Silverlight,Inheritance,Controls,Lifecycle,在Silverlight中继承控件时,如何确定其模板是否已应用 也就是说,我能否可靠地摆脱繁琐的\u hastemplatebeapped字段 public class AwesomeControl : Control { private bool _hasTemplateBeenApplied = false; public override void OnApplyTemplate() { base.OnApplyTemplate();

在Silverlight中继承控件时,如何确定其模板是否已应用

也就是说,我能否可靠地摆脱繁琐的
\u hastemplatebeapped
字段

public class AwesomeControl : Control
{
    private bool _hasTemplateBeenApplied = false;

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        this._hasTemplateBeenApplied = true;
        // Stuff
    }

    private bool DoStuff()
    {
        if (this._hasTemplateBeenApplied)
        {
            // Do Stuff
        }
    }

}否这是跟踪模板是否已应用的标准方法。

+1。我想补充一点,如果你用模板部件存储私有字段,尽管你可以检查它们是否为非空,但我不建议这样做:理论上,所有模板部件在控件中都是可选的。@AnthonyWJones-好吧,那么,我认为它们也必须在内部跟踪它,但我猜他们只是再一次对他们的内部秘密:->@Jeff Wilcox,是的,我还检查了我的
btninerawesomeness!=空值
有时会改为空值,但确实感觉有点脏。@herzmeister:由于“对其内部保密”,您可能会说“将私有数据封装在其对象中”。顺便说一句,严格来说,应用程序模板可能会发生多次,尽管我们通常只对它至少发生过一次感兴趣。@herzmeister:它不仅仅是“有点脏”。自定义控件不应假定特定模板部件始终存在于用于特定实例的实际模板中。使用代码可以指定一个完全不同的模板,该模板可能不包含控制代码希望显示的所有元素。