在WPF/XAML中只允许特定类型的子级
本文关键字:类型 许特定 WPF XAML | 更新日期: 2023-09-27 18:20:37
在我的一个应用程序中,我需要允许用户以某些方式自定义用户界面。为此,我允许用户在XAML中指定用户界面,在应用程序启动时动态加载该界面。这很好用。
现在,我想为用户提供自定义控件,它派生自Border
(我们称之为MyFrame
)。
我需要确保MyFrame
可能不是另一个MyFrame
的子级,因此应该防止以下情况:
<ns:MyFrame>
<Grid>
<ns:MyFrame />
</Grid>
</ns:MyFrame>
我应该如何实现这一点?
您在编译时将无法执行此操作。
但是,在运行时,无论何时创建MyFrame的新实例(如果它有父MyFrame),都可以使用此可视化树助行器进行检查。如果是,则引发异常。
我会抛出一个异常,并从MyFrame上的Loaded事件处理程序发出一条明确的消息:遍历新MyFrame实例的祖先,并尝试找到另一个实例;如果您确实找到了一个,请抛出异常。
备选方案:使用在MyFrame的所有实例上设置的可继承附加属性,并在Loaded处理程序中进行检查。
我想不出有什么方法可以静态地执行你的规则。