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

问题描述:

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

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

,可以说如果CustomControl MyCustomTextBox是基于一个文本框,我就可以加载TextBoxTemplateView.xaml,每< 文本框 ... />切换到< MyCustomTextBox .../>然后将其添加到我的主视图?
如果是这样,怎么样?我可以把它变成一个字符串,只是替换这些字,然后把它变回可用的东西?或者当我使用XamlReader.Load时,我必须编辑UserControl对象吗?或者是其他东西?

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

+0

你为什么不简单地尝试它? – Clemens

+0

如果我知道如何,我会......你为什么认为我来到这里? –

+1

“将每个切换到”听起来像加载XAML之前的简单字符串替换。你有没有尝试过任何东西? – Clemens

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

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

+0

非常感谢!我尝试了第一种方法,问题是,如何将.xaml文件转换为字符串?我试图用'GetManifestResourceStream'来完成它,但是我必须将文件标记为嵌入式资源,这使得它无法使用。有没有办法从我的文件中得到一个字符串,并仍然在项目中使用它? –

+0

该文件的构建操作是什么? – mm8

+0

Page,它是一个UserControl。 –