windows-runtime - 如何使用 WinRT/C++ 在 WinUI3 中打开新窗口?
问题描述
如何在 WinRT / WinUI3 中打开新窗口?我想单击一个按钮并在当前/主窗口顶部打开另一个浮动窗口。
我已经尝试了几个零运气样本的代码:
- https://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/windowing/windowing-overview
- 我无法导入 <winrt/Microsoft.UI.Windowing.h>(dll 不加载)
- https://github.com/microsoft/Windows-universal-samples/blob/main/Samples/AppWindow/cppwinrt/Scenario3_Size.h
- 这使用旧的 Windows:: 命名空间(不合适)
- https://github.com/microsoft/WinUI-3-Demos/tree/master/src/ContosoAirlinePOS
- 不导航到新窗口(BoardingPassWindow 实际上是一个页面,而不是一个窗口)
Frame.Navigate(xaml_typename<NewWindowClass>())
- 不起作用/抛出异常
-
winrt::Microsoft::UI::Xaml::Controls::Frame rootFrame{ nullptr }; auto content = Window::Current().Content(); if (content) { rootFrame = content.try_as<winrt::Microsoft::UI::Xaml::Controls::Frame>(); }
- 以上片段^
Window::Current().Content();
调用时抛出异常
appWindow = Microsoft::UI::Xaml::Window(this, {}); appWindow.Activate()
- 抛出异常
大多数 C++ WinUI3 文档中仍然只有 C# 代码示例,因此对我来说基本上没用。我只想打开一个新窗口,别无其他。
解决方案
您可以使用Windows App SDK 示例,例如修改此方法: void DemoPage::TitleBtn_Click
像这样:
void DemoPage::TitleBtn_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e)
{
auto window = Window();
auto tb = TextBlock();
tb.Text(L"Hello");
window.Content(tb);
window.Activate();
}
这看起来与此处的 C# 示例完全相同:创建一个新窗口
var window = new Window();
window.Content = new TextBlock() { Text = "Hello" };
window.Activate();
推荐阅读
- c++ - 任何人都可以解释为什么我在这里得到 1 吗?
- tensorflow2.0 - 在 GPflow 中进行推理的 API
- javascript - 使用 React 道具和 Axios 更新列表不起作用
- azure - 将 go 与 redis 一起使用 - 无法连接
- java - 关闭 JFrame 主方法时不应停止执行
- django - 如何在 Django 模板标签中放置换行符?
- recursion - 在 Coq 中允许潜在的无限循环
- sql - Oracle:安全地更改表中的值,如果不存在新条目,则删除旧条目
- python-3.x - 如何在 Python 中为 IRC 机器人配置 SSL?
- android - 为什么 smallScreens=false 会阻止应用安装在 Pixel 3(来自 Google Play)上?