在我的一个应用程序中,我需要允许用户以某种方式自定义用户界面。为此,我允许用户在XAML中指定用户界面,我在应用程序启动时动态加载。这很好。
现在我想为用户提供自定义控件,该控件派生自Border
(我们称之为MyFrame
)。
我需要确保MyFrame
可能不是另一个MyFrame
的孩子,因此应该阻止以下情况:
<ns:MyFrame>
<Grid>
<ns:MyFrame />
</Grid>
</ns:MyFrame>
我该如何实现?
答案 0 :(得分:3)
您将无法在编译时执行此操作。
但是,在运行时,您可以使用this visual tree walker检查是否创建了新的MyFrame实例(如果它具有父MyFrame)。如果是,请提出异常。
答案 1 :(得分:1)
我会从MyFrame上的Loaded事件处理程序中抛出一条带有明确消息的异常:逐步通过新MyFrame实例的祖先,并尝试找到另一个;如果找到一个,则抛出异常。
替代方法:使用您在MyFrame的所有实例上设置的可继承附加属性 - 并在Loaded处理程序中检查它。
我无法想象以静态方式执行规则的任何方式。