随着 WinUI-3 的到来,WPF 会过时吗?
说到桌面应用程序开发,是时候完全抛弃 WinForm/WPF 传统迁移到 WinUI-3 了吗?
我正在尝试制作一个在后台运行的程序,并且我想在 Windows 的托盘图标部分放置一个托盘图标。
我没有找到不使用 Windows 窗体的解决方案(这在 .Net 6 中是不可能的)
是否有其他解决方案来显示托盘图标或者不再可能?
我正在创建我的第一个 WinUI 3 桌面应用程序。我的主窗口上有一个导航视图。我通过 NavigationView 中的框架导航到 9 个不同的页面。其中一页用于打印报告。我需要让 FileSavePicker 从“reportPage”工作。我直接按照 learn.microsoft.com 的示例实现了以下内容。(我还在下面的一个小型虚拟 winui-3 沙箱测试应用程序中添加了相同的 FileSavePicker 代码段,但我将代码放在 MainWindow 的代码隐藏中,并且它工作得很好。)我需要让 FileSavePicker 工作页面而不是主窗口。感谢大家迄今为止的帮助。
我收到此调试错误:
我知道问题与获取 MainWindow 的 HWND 有关。
// Retrieve the window handle (HWND) of the current WinUI 3 window.
var window = (MainWindow)Application.Current.MainWindow; (I tried this, but it did not work)
Run Code Online (Sandbox Code Playgroud)
(我尝试过这个,但没有成功)
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(window);
Run Code Online (Sandbox Code Playgroud)
我从上面的行得到这个错误:
我不知道正确的语法。
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Provider;
namespace MetricReporting.Pages
{
/// <summary>
/// An empty …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚这一点。我只想发布/部署一个 hello world 简单的 WinUI 3 应用程序。在发布我的真实应用程序之前(我尝试发布我的完整应用程序,但我认为它可能有问题,所以我创建了一个非常小的测试应用程序,这样我就可以测试发布/部署过程)。我对这个漫无目的的问题表示歉意。我正在扔出一条生命线。我的木筏正在下沉。我很高兴能用 WinUI 3 构建一些东西,我喜欢所有新的控件和你可以做的事情。但我无法与任何人共享该应用程序,因此他们可以对其进行测试。:-(。我无法发布到 Microsoft Store。该公司不允许从 Microsoft Store 下载。\n我已经花了一个月的时间来发布 winui 3 应用程序。
\n我已经尝试了所有不同的方式来发布“单击一次”、“生成单个文件”、“启用 ReadToRun 编译”等。我开发的应用程序需要在托管电脑上运行,用户没有安装 Visual Studio,用户无法打开开发人员模式,我无法侧面加载。我创建了一个证书,我让用户将证书安装到受信任的根位置。尽管如此,该应用程序仍不会部署。我因尝试而精疲力尽。我有大量关于我尝试发布/部署的笔记。我已经能够通过 Visual Studio 成功“发布”该应用程序,但没有人可以将其安装在他们的电脑上。
\n我尝试阅读所有文档(有这么多,为什么有这么多?为什么这么难?(修辞,我知道):还有更多,这只是部分列表:
\n我应该放弃 MSIX 打包吗?(我喜欢 MSIX 打包的承诺“为用户提供了一种使用现代 UI 来安装、卸载和更新应用程序的简单方法。”)\n我今天的目标是尝试“稀疏打包”,和/或“无包装”,但现在我必须阅读 50 页的文档来了解如何做到这一点。有没有搞错????沉没、沉没、沉没……
\n\n以下是用户尝试运行 …
我创建了一个毛伊岛 Windows 应用程序。我希望通过 URI 激活应用程序并将查询参数传递给应用程序。
我在包清单中添加了用于通过 uri 调用应用程序的 Windows 协议:
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="my-app">
<uap:DisplayName>My App</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
Run Code Online (Sandbox Code Playgroud)
当我通过浏览器 my-app://foo.com?user=123456 激活应用程序时,应用程序启动,但它作为冷启动启动。在我的 Win UI 应用程序中,我覆盖了 onLaunched 方法,但无论我如何启动该应用程序,我都无法访问该协议。我正在尝试从我的 UWP 应用程序重新创建以下代码:
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
var queryStr = eventArgs.Uri.Query;
App.UserId = System.Web.HttpUtility.ParseQueryString(queryStr).Get("user");
// Navigate to a view
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
Xamarin.Forms.Forms.Init(args);
Window.Current.Content = rootFrame;
}
rootFrame.Navigate(typeof(MainPage), …Run Code Online (Sandbox Code Playgroud) 是否可以在MAUI项目中使用WinUI 3现有的控件?就像https://github.com/microsoft/WinUI-Gallery中的控件一样
我将 WinUI 包安装到我的 MAUI 项目中
<ItemGroup>
<PackageReference Include="Microsoft.UI.Xaml" Version="2.7.1" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.1.1" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
并编辑App.xaml
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiWithWinui"
xmlns:controls="using:Microsoft.UI.Xaml.Controls"
x:Class="MauiWithWinui.App">
<Application.Resources>
<controls:XamlControlsResources>
<controls:XamlControlsResources.MergedDictionaries>
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
</controls:XamlControlsResources.MergedDictionaries>
</controls:XamlControlsResources>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
也 Platform/Windows/App.xaml
<maui:MauiWinUIApplication
x:Class="MauiWithWinui.WinUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:maui="using:Microsoft.Maui"
xmlns:local="using:MauiWithWinui.WinUI"
xmlns:controls="using:Microsoft.UI.Xaml.Controls">
<Application.Resources>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</Application.Resources>
</maui:MauiWinUIApplication>
Run Code Online (Sandbox Code Playgroud)
但是当我去MAUI的某个Page下使用WinUI控件时,提示找不到该控件
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="using:Microsoft.UI.Xaml.Controls"
x:Class="MauiWithWinui.MainPage">
<Grid>
<controls:RatingControl AutomationProperties.Name="RatingControl with placeholder" PlaceholderValue="3" />
</Grid>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)
MAUI项目仅针对Windows平台,尽管我知道winui3项目是更好的选择
我想使用 .NET 8 创建一个新的 WinUI 3 桌面应用程序。在 Visual Studio 中初始化项目后,该项目位于 .NET 6 上。我将 .csproj 文件的 TargetFramework 从 更改为net6.0-windows10.0.19041.0,net8.0-windows10.0.19041.0但弹出此错误。如何使用 .NET 8 解决此问题?
错误:
NETSDK1083: The specified RuntimeIdentifier "win10-x86" is not recognized
NETSDK1083: The specified RuntimeIdentifier "win10-x64" is not recognized
NETSDK1083: The specified RuntimeIdentifier "win10-arm64" is not recognized
Run Code Online (Sandbox Code Playgroud)
我的.csproj文件:
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>SudokuEngineApp</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x86;x64;ARM64</Platforms>
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<PublishProfile>win10-$(Platform).pubxml</PublishProfile>
<UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我尝试过 .NET 7 并且它有效:
<TargetFramework>net7.0-windows10.0.19041.0</TargetFramework>
而 .NET 8 则不然。
我需要获得对父级的Microsoft.UI.Xaml.Window引用Control。Project Reunion 0.5 有办法做到这一点吗?Window.Current不适用于桌面应用程序。
我正在尝试在我的 UWP (WinUI3) 应用程序中创建一个登录系统,当我尝试启动登录内容对话框时,它崩溃并抛出此错误:
System.ArgumentException:“值不在预期范围内。”
在await messageDialog.ShowAsync();
app.xaml.cs 上的代码:
protected override async void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new MainWindow();
m_window.Activate();
Login();
}
protected async void Login()
{
var messageDialog = new ContentDialogs.LoginDialog();
await messageDialog.ShowAsync();
if (App.Aplicacao.Utilizador == null)
{
m_window.Close();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
内容对话框 XAML:
<ContentDialog
x:Class="xizSoft.ContentDialogs.LoginDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:xizSoft.ContentDialogs"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource SystemControlAcrylicWindowBrush}">
<Grid>
</Grid>
</ContentDialog>
Run Code Online (Sandbox Code Playgroud)
隐藏代码:
public LoginDialog()
{
this.InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试为 Winui3 应用程序创建安装程序并向其添加外部 msi 文件。
到目前为止,我已经尝试过 Wix 工具集和 Microsoft Visual Studio 安装程序项目,但两者都创建了一个包含不起作用的 exe 的 msi 文件。我设法创建具有工作启动器的安装程序的唯一方法是打包桌面应用程序,如下所示https://nicksnettravels.builttoroam.com/packaging-winui3-desktop/。输出是一个 msix 文件,用于安装并启动应用程序。但是,我仍然需要安装外部 msi 文件才能使我的应用程序正常工作。
是否有任何用于创建包含我的项目解决方案 msix 和其他 msi 的 exe 安装程序的解决方案,或者添加打包桌面应用程序的先决条件的方法?