只允许WPF / XAML中的某些类型的孩子?

时间:2012-01-16 13:33:50

标签: c# wpf .net-4.0

在我的一个应用程序中,我需要允许用户以某种方式自定义用户界面。为此,我允许用户在XAML中指定用户界面,我在应用程序启动时动态加载。这很好。

现在我想为用户提供自定义控件,该控件派生自Border(我们称之为MyFrame)。

我需要确保MyFrame可能不是另一个MyFrame的孩子,因此应该阻止以下情况:

<ns:MyFrame>
    <Grid>
        <ns:MyFrame />
    </Grid>
</ns:MyFrame>

我该如何实现?

2 个答案:

答案 0 :(得分:3)

您将无法在编译时执行此操作。

但是,在运行时,您可以使用this visual tree walker检查是否创建了新的MyFrame实例(如果它具有父MyFrame)。如果是,请提出异常。

答案 1 :(得分:1)

我会从MyFrame上的Loaded事件处理程序中抛出一条带有明确消息的异常:逐步通过新MyFrame实例的祖先,并尝试找到另一个;如果找到一个,则抛出异常。

替代方法:使用您在MyFrame的所有实例上设置的可继承附加属性 - 并在Loaded处理程序中检查它。

我无法想象以静态方式执行规则的任何方式。