在运行时加载.xaml文件和编辑对象树
在读入XamlWriter和XamlReader之后,我想知道是否可以在运行时加载任意.xaml文件,编辑对象树并重新使用它。在运行时加载.xaml文件和编辑对象树
我想创建的是一种展示应用程序的所有可用样式的项目。我有几个ControlType(比如ButtonTemplateView.xaml,ListboxTemplateView.xaml ...)的TemplateViews,它们的Style
属性绑定到视图模型,在运行时为每个配件样式动态构造,然后添加到主视图。 但我也想显示项目的CustomControls的所有样式,现在我正在通过Activator.CreatInstance
和样式的TargetType
,然后将该对象添加到主视图。现在
,可以说如果CustomControl MyCustomTextBox是基于一个文本框,我就可以加载TextBoxTemplateView.xaml,每< 文本框 ... />切换到< MyCustomTextBox .../>然后将其添加到我的主视图?
如果是这样,怎么样?我可以把它变成一个字符串,只是替换这些字,然后把它变回可用的东西?或者当我使用XamlReader.Load
时,我必须编辑UserControl对象吗?或者是其他东西?
我希望这不是一个重复的问题(至少我没有找到像这样的东西),并感谢提前的任何帮助。
您可以将<TextBox>
的所有出现内容替换为string
中的<local:MyCustomTextBox>
,并将其传递给XamlReader.Load
方法。这可能是最简单的方法,因为XamlReader
将为您创建MyCustomTextBox
元素。
另一种选择是迭代UserControl
中的<TextBox>
元素,该元素从XamlReader.Load
方法返回并将其替换为MyCustomTextBox
元素。如何执行此操作取决于控件在UserControl
的元素树中的位置。
非常感谢!我尝试了第一种方法,问题是,如何将.xaml文件转换为字符串?我试图用'GetManifestResourceStream'来完成它,但是我必须将文件标记为嵌入式资源,这使得它无法使用。有没有办法从我的文件中得到一个字符串,并仍然在项目中使用它? –
该文件的构建操作是什么? – mm8
Page,它是一个UserControl。 –
你为什么不简单地尝试它? – Clemens
如果我知道如何,我会......你为什么认为我来到这里? –
“将每个 切换到 ”听起来像加载XAML之前的简单字符串替换。你有没有尝试过任何东西? –
Clemens