gpt4 book ai didi

wpf - 手动设置 MainWindow 和编写应用程序 (MEF) 时无法显示 WPF 应用程序

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

我已经掌握了一个星期的 MEF,我正在尝试构建一个 WPF 应用程序,该应用程序可以从 MEF 加载导入的控件。

我创建了一个 WPF 应用程序项目并删除了默认窗口和应用程序启动 URI。然后我处理了应用程序启动事件来编写应用程序:

public partial class App : Application, IPartImportsSatisfiedNotification
{
{...}

private void App_Startup(object sender, StartupEventArgs e)
{
this.Compose();
}

public void Compose()
{
try
{
globalCatalog.Catalogs.Add(new DirectoryCatalog(extensionsDirectoryPath));
CompositionContainer container = new CompositionContainer(globalCatalog);
container.ComposeParts(this);
}
catch (Exception ex)
{
// Do something
}
}

{...}
}

实际上,当满足导入后调试和观察对象时,一切都像我想要的那样分层组成。但是,当我尝试显示应用程序的 MainWindow 时,MainWindow.Show() 调用会引发异常:

"Specified element is already the logical child of another element. Disconnect it first."



虽然我在 OnImportsSatisfied 方法中的代码看起来很好,因为它在不使用 MEF 机制时可以正常工作:
public void OnImportsSatisfied()
{
Window mainWindow = new Window();
mainWindow.Content = this.importedControl;
this.MainWindow = mainWindow;
this.MainWindow.Show();
}

我坚持这样一个事实,即当不使用 MEF 导入控件时,它可以完美地工作。令人惊讶的是,这段代码也不起作用:
Window mainWindow = new Window();
//mainWindow.Content = this.importedControl;
this.MainWindow = mainWindow;
this.MainWindow.Show();

所以我怀疑 ComposeParts 做的比它说的要多一些,因为它是唯一作用于我的实际应用程序实例的成员。

希望有人可以帮助我(格伦?)。
谢谢。

编辑:

我发现当我从我的部件中删除 IPartImportsSatisfiedNotification 接口(interface)时,不会引发异常并且会显示窗口。但是当然窗口是空的,因为我需要这个 OnImportsSatisfied 方法将窗口的 DataContext 设置为其关联的导入 View 模型。

最佳答案

的示例应用程序WPF Application Framework (WAF) 展示如何在 WPF 应用程序中使用 MEF。

关于wpf - 手动设置 MainWindow 和编写应用程序 (MEF) 时无法显示 WPF 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3254296/

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