在运行时加载 .xaml 文件并编辑对象树

Load .xaml file and edit object tree at runtime

阅读 XamlWriter 和 XamlReader 后,我想知道是否可以在运行时加载任意 .xaml 文件,编辑对象树,然后再次使用它。

我想要创建的是一种展示项目所有可用样式的应用程序。我有几个 ControlTypes 的 TemplateViews(例如 ButtonTemplateView.xaml、ListboxTemplateView.xaml ...),它们的 Style 属性 绑定到一个视图模型,它为每个动态构建在运行时调整样式,然后添加到主视图中。 但我也想显示项目的 CustomControls 的所有样式,现在我正在通过 Activator.CreatInstanceTargetType 样式,然后将对象添加到主视图。

现在,如果 CustomControl MyCustomTextBox 基于 TextBox,我可以只加载 TextBoxTemplateView.xaml,切换每个 <TextBox ... /> 到 <MyCustomTextBox .../> 然后将它添加到我的主视图?
如果是这样,如何?我可以把它变成一个字符串,只替换单词,然后把它变回可用的东西吗?或者我是否必须编辑使用 XamlReader.Load 时获得的 UserControl 对象?还是别的?

我希望这不是一个重复的问题(至少我没有找到类似的问题)并感谢您提前提供的帮助。

您可以在传递给 XamlReader.Load 方法的 string 中将所有出现的 <TextBox> 替换为 <local:MyCustomTextBox>。这可能是最简单的方法,因为 XamlReader 将为您创建 MyCustomTextBox 元素。

另一种选择是遍历从 XamlReader.Load 方法返回的 UserControl 中的 <TextBox> 元素,并将这些元素替换为 MyCustomTextBox 元素。如何做到这一点取决于控件在 UserControl.

的元素树中的位置