在运行时加载 .xaml 文件并编辑对象树
Load .xaml file and edit object tree at runtime
阅读 XamlWriter 和 XamlReader 后,我想知道是否可以在运行时加载任意 .xaml 文件,编辑对象树,然后再次使用它。
我想要创建的是一种展示项目所有可用样式的应用程序。我有几个 ControlTypes 的 TemplateViews(例如 ButtonTemplateView.xaml、ListboxTemplateView.xaml ...),它们的 Style
属性 绑定到一个视图模型,它为每个动态构建在运行时调整样式,然后添加到主视图中。
但我也想显示项目的 CustomControls 的所有样式,现在我正在通过 Activator.CreatInstance
和 TargetType
样式,然后将对象添加到主视图。
现在,如果 CustomControl MyCustomTextBox 基于 TextBox,我可以只加载 TextBoxTemplateView.xaml,切换每个 <TextBox ... /> 到 <MyCustomTextBox .../> 然后将它添加到我的主视图?
如果是这样,如何?我可以把它变成一个字符串,只替换单词,然后把它变回可用的东西吗?或者我是否必须编辑使用 XamlReader.Load
时获得的 UserControl 对象?还是别的?
我希望这不是一个重复的问题(至少我没有找到类似的问题)并感谢您提前提供的帮助。
您可以在传递给 XamlReader.Load
方法的 string
中将所有出现的 <TextBox>
替换为 <local:MyCustomTextBox>
。这可能是最简单的方法,因为 XamlReader
将为您创建 MyCustomTextBox
元素。
另一种选择是遍历从 XamlReader.Load
方法返回的 UserControl
中的 <TextBox>
元素,并将这些元素替换为 MyCustomTextBox
元素。如何做到这一点取决于控件在 UserControl
.
的元素树中的位置
阅读 XamlWriter 和 XamlReader 后,我想知道是否可以在运行时加载任意 .xaml 文件,编辑对象树,然后再次使用它。
我想要创建的是一种展示项目所有可用样式的应用程序。我有几个 ControlTypes 的 TemplateViews(例如 ButtonTemplateView.xaml、ListboxTemplateView.xaml ...),它们的 Style
属性 绑定到一个视图模型,它为每个动态构建在运行时调整样式,然后添加到主视图中。
但我也想显示项目的 CustomControls 的所有样式,现在我正在通过 Activator.CreatInstance
和 TargetType
样式,然后将对象添加到主视图。
现在,如果 CustomControl MyCustomTextBox 基于 TextBox,我可以只加载 TextBoxTemplateView.xaml,切换每个 <TextBox ... /> 到 <MyCustomTextBox .../> 然后将它添加到我的主视图?
如果是这样,如何?我可以把它变成一个字符串,只替换单词,然后把它变回可用的东西吗?或者我是否必须编辑使用 XamlReader.Load
时获得的 UserControl 对象?还是别的?
我希望这不是一个重复的问题(至少我没有找到类似的问题)并感谢您提前提供的帮助。
您可以在传递给 XamlReader.Load
方法的 string
中将所有出现的 <TextBox>
替换为 <local:MyCustomTextBox>
。这可能是最简单的方法,因为 XamlReader
将为您创建 MyCustomTextBox
元素。
另一种选择是遍历从 XamlReader.Load
方法返回的 UserControl
中的 <TextBox>
元素,并将这些元素替换为 MyCustomTextBox
元素。如何做到这一点取决于控件在 UserControl
.