我想制作一些将包含在WPF应用程序中的库代码。根据具体情况,图书馆可能会弹出一个窗口。我可以在XAML中定义窗口,但我想将XAML当作模板。在运行时,在创建窗口以便显示窗口时,我想用运行时定义的值替换Xaml模板中的某些标记。对于窗口定义,我可以使用WPF窗口中的XamlReader.Load或InitializeFromXaml吗?
我想要做的是这样的:
public partial class DynamicXamlWindow : Window
{
Button btnUpdate = null;
public DynamicXamlWindow()
{
string s = XamlTemplate;
// replace some things in the XamlTemplate here
Window root = System.Windows.Markup.XamlReader.Load(...);
Object _root = this.InitializeFromXaml(new StringReader(s).ReadToEnd()); //??
btnUpdate = // ???
//InitializeComponent();
}
的XamlTemplate字符串如下所示:
private string XamlTemplate = @"
<Window x:Class='@@CLASS'
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
Title='@@TITLE'
Height='346' Width='380'>
<Grid>
...
我见过的例子,其中一个按钮或部分XAML定义并动态加载。但这不是一个按钮或部分。 XamlTemplate为实际的Window提供了XAML。
这是可能与InitializeFromXaml或XamlReader.Load?如果是这样,怎么样?
然后我可以检索XAML中定义的控件,例如上面代码片段中的btnUpdate。怎么样?