gpt4 book ai didi

.net - 我可以使用 WPF 窗口中的 XamlReader.Load 或 InitializeFromXaml 来进行窗口定义吗?

转载 作者:行者123 更新时间:2023-12-02 15:43:10 26 4
gpt4 key购买 nike

我想生成一些将包含在 WPF 应用程序中的库代码。根据情况,图书馆可能会弹出一个窗口。我可以在 XAML 中定义窗口,但我想将 XAML 视为模板。在运行时,在创建窗口以便可以显示它时,我想用运行时定义的值替换 Xaml 模板中的某些标记。

我想做的是这样的:

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 提供实际窗口的 XAML。

这可以通过InitializeFromXaml 或 XamlReader.Load 实现吗? ?如果是这样,怎么办?

然后我可以检索 XAML 中定义的控件吗,例如上面代码片段中的 btnUpdate。如何?

最佳答案

您无法创建具有 x:class 属性的动态页面。但是,如果每个动态页面背后的代码都相同,您可以通过将模板更改为来欺骗它:

private string XamlTemplate = @"
<control:BaseWindow
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:control='WhateverHere'
Title='@@TITLE'
Height='346' Width='380'>
<Grid>...

当您准备好解析此用法时:

XamlReader.Parse(xaml);

如果您想访问隐藏代码中的项目,请在隐藏代码中使用 this.FindName("btnUpdate") 。

关于.net - 我可以使用 WPF 窗口中的 XamlReader.Load 或 InitializeFromXaml 来进行窗口定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com