【问题标题】:Start WPF application with WinForms window使用 WinForms 窗口启动 WPF 应用程序
【发布时间】:2016-08-31 08:41:10
【问题描述】:

我有 WPF 应用程序和一些 WPF 窗口。但我的主窗口是WinForms,我需要用它启动程序。但是我该怎么做呢?这是我的App.xaml 文件:

<Application x:Class="Player.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="UI/MainWindow.xaml">
    <Application.Resources>
    </Application.Resources>
</Application>

如果我尝试用StartupUri="UI/Form1.cs" 替换StartupUri="UI/MainWindow.xaml",我会得到"System.IO.IOException", "Cannot find "ui/form1.cs"。甚至可以使用WinForms 窗口启动我的应用程序吗?

【问题讨论】:

    标签: c# wpf winforms xaml windows-applications


    【解决方案1】:

    首先转到 App.xaml 并删除 StartupUri="UI/MainWindow.xaml"。 比去 App.xaml.cs 并覆盖 OnStartup 方法。在那里,您可以实例化并运行您的 win 表单窗口。

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        var form = new Form1();
        form.Show();
    }
    

    【讨论】:

    • 现在我有一个问题:当我关闭窗口时,我的OnExit 方法没有被调用。我该如何解决这个问题?
    • @JustLogin 在调用 Application.Current.Shutdown() 的任何 xaml.cs 中创建一个公共方法。从 Form1.FormClosed 调用它。
    【解决方案2】:

    有一篇来自 MSDN 的好文章,它为您提供了一个如何在 XAML 中集成 Windows-Forms 元素的示例:https://msdn.microsoft.com/de-de/library/ms742875(v=vs.110).aspx

    它应该对你的假设有帮助。

    【讨论】:

    • 这对我不起作用。是的,我知道WindowsFormsHost 类,但它有问题。由于我的应用程序主要是媒体播放器,因此我使用axwindowsmediaplayer 播放视频(MediaElement 由于性能不佳而不是解决方案)。它工作正常,但在 WPF 中托管时开始滞后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多