You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF实现投屏功能时遇‘无法创建新视图,主窗口未创建’错误求助

问题描述

我需要创建一个WPF应用实现投屏功能,参考微软官方UWP投影示例,尝试将其转换为WPF应用(代码仓库:MirrorCastDemo)。主要修改UI部分,用MainWindow(Window)替代原示例的MainPage(Page),也曾尝试沿用MainPage(Page),但仍出现相同错误。

运行应用时收到错误提示:

Could not create a new view because the main window has not yet been created

困惑于错误中的“主窗口”所指:StartProjecting()方法属于Scenario3.xaml.cs,且是通过点击已创建的MainWindow上的按钮导航到Scenario3页面的,导航代码如下:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Scenario3 scenario3 = new Scenario3();
    ScenarioFrame.Navigate(scenario3);
}

请问问题出在哪里?

问题分析与解决

核心原因

错误里的“主窗口”并非你创建的WPF MainWindow,而是UWP框架层面的核心应用窗口。原UWP投影示例依赖的ApplicationViewSwitcher.StartProjecting等API是UWP专属的多视图机制,这类API要求UWP应用的核心上下文(包括主应用视图)已经完成初始化,但WPF应用的窗口模型和UWP完全不同,没有UWP的ApplicationView主视图上下文,所以调用时会报错。

解决方向

  • 替换为WPF兼容的投屏API:放弃复用UWP的多视图逻辑,改用Windows.Media.Casting命名空间下的WinRT API(可在WPF中通过NuGet引入WinRT包调用)。具体步骤包括:
    1. 使用CastDevicePicker让用户选择投屏设备
    2. 将WPF窗口的内容转换为可投射的媒体源(比如通过RenderTargetBitmap捕获窗口帧,再封装成MediaStreamSource)
    3. 建立与投屏设备的连接并推送媒体流
  • 避免直接复用UWP专属代码:原示例中StartProjecting依赖的ApplicationView.GetForCurrentView()、ApplicationViewSwitcher都是UWP独有的API,WPF中没有对应实现,强行移植必然出现上下文缺失的错误。

内容的提问来源于stack exchange,提问作者Tom Xue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:22:18