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

时间:2017-06-27 08:20:53

标签: c# wpf xaml runtime custom-controls

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

另一种选择是遍历从<TextBox>方法返回的UserControl中的XamlReader.Load元素,并将其替换为MyCustomTextBox元素。如何执行此操作取决于控件在UserControl的元素树中的位置。