在阅读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对象?或其他什么?
我希望这不是一个重复的问题(至少我没有找到类似的东西)并且感谢您提前提供任何帮助。
答案 0 :(得分:1)
您可以将传递给<TextBox>
方法的<local:MyCustomTextBox>
中string
的所有出现替换为XamlReader.Load
。这可能是最简单的方法,因为XamlReader
会为您创建MyCustomTextBox
元素。
另一种选择是遍历从<TextBox>
方法返回的UserControl
中的XamlReader.Load
元素,并将其替换为MyCustomTextBox
元素。如何执行此操作取决于控件在UserControl
的元素树中的位置。