我刚刚开始学习WinUI 3.0 ,在 google 或像《学习 WinUI 3.0如何设置应用程序的默认窗口大小》这样的书籍中找不到任何信息。我知道在 UWP 中它可能是这样的
ApplicationView.PreferredLaunchViewSize = new Size(480, 800);
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
Run Code Online (Sandbox Code Playgroud)
但实际上它在WinUI中不起作用
我将尝试尽可能简洁地总结我的问题:
我有以下环境可以使用:
我需要的:
关于是否可以以与使用 C++ 在 Qt 中设计 UI 代码类似的方式使用 XAML 和 C++/WinRT 的明确答案。精确的奇偶校验是不必要的,我只是想消除使用 WinAPI 管理 UI 的麻烦,实际上我必须“手动”完成所有操作
如果上述情况属实,那么我在哪里可以找到工作流程各个步骤的指南?如何制作“窗口对象”,如何设计具有布局管理的窗口,如何处理 UI 事件等?
如果需要在我尝试升级的旧版 WinAPI 应用程序的上下文中完成上述操作,是否同样可行?
我试图使用 WinUI,所以我从 Nuget 安装了插件 Microsoft.UI.Xaml (2.4.2),并按照说明将其添加<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>到我的 App.Xaml
这是我的 App.Xaml 文件
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
但它说:
XML 命名空间“using:Microsoft.UI.Xaml.Controls”中不存在标记“XamlControlsResources”
我尝试了 WinUI 插件的旧版本,并尝试了 .Net Core 和 Framework,但仍然遇到这个问题
我需要获得对父级的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) 我试图在我的应用程序中显示一个弹出窗口来编辑品牌,但它没有显示。
我调用对话框的函数:
private async Task EditBrandAsync(Brand brand)
{
var dialog = new ContentDialogs.EditBrandDialog(brand);
await dialog.ShowAsync();
}
Run Code Online (Sandbox Code Playgroud)
内容对话框 XAML:
<ContentDialog
x:Class="xizSoft.ContentDialogs.EditBrandDialog"
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 ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<TextBlock Text="Marca" Style="{StaticResource SubheaderTextBlockStyle}"/>
<TextBox Header="Nome" Text="{Binding Name}"/>
<TextBox Header="Logotipo" Text="{Binding LogoFileName}"/>
<StackPanel>
<Image Source="{Binding LogoFileName}"/>
</StackPanel>
</StackPanel>
</ContentDialog>
Run Code Online (Sandbox Code Playgroud)
隐藏代码:
namespace xizSoft.ContentDialogs
{
public sealed partial class EditBrandDialog : ContentDialog
{
public Brand _brand {get; set;}
public EditBrandDialog(Brand brand)
{
this.InitializeComponent();
this.DataContext = _brand = brand;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试进行调试并且正在调用内容对话框,所以我不知道为什么它没有显示。
我正在尝试弄清楚如何在 MSIX 中打包 WinUI 桌面应用程序。我们不想上传到 Windows 应用商店或其他任何东西,只是为了能够为人们提供一个安装程序(很像 .msi 文件),并让他们自己将其安装在台式电脑上。
我使用VS2022来打包最基本的WinUI应用程序,即框架为您创建的应用程序。我已成功为其创建了 .msix 文件。但当我将其复制到 Windows Sanbox 实例时,它似乎不知道如何处理 .msix 扩展名。Windows Sandbox 是版本 2004,根据此页面,它应该足够好。
但是,双击 .msix 文件不起作用:
谁能建议这是为什么?
另外,这篇文章似乎表明,即使我可以打开 msix,它仍然需要最终用户手动安装依赖项!这肯定是不对的吧?没有最终用户愿意这样做,不是吗?这篇文章现在有点旧了(事情进展很快),所以有人可以告诉我这是否仍然是 msix 软件包安装程序的状态。有没有一种好的方法来打包应用程序以便安装简单?
Microsoft 提供了多种方法来安全访问 Azure Key Vault 机密,特别是使用托管身份或服务主体作为身份提供者。但是,这些方法明确设计用于使用基于 Azure 的资源,例如 Web 应用程序和微服务。它们不适用于 UWP/WinUI 桌面应用程序。
到目前为止,我发现的允许 UWP/WinUI 桌面应用程序访问 Key Vault 的唯一方法是将应用程序的 Azure 注册信息(TenentId、ClientId 和 ClientSecret - 秘密,它们本身!)加载到由创建新的 SecretClient 对象 (Azure.Security.KeyVault.Secrets) 时的 DefaultAzureCredential() 方法。
但这意味着我需要将这些秘密存储在代码或配置文件中以便在运行时读取。绝对不是最佳实践!我肯定错过了什么。
2020 年,UWP/WinUI 桌面应用程序安全访问 Key Vault 机密(且在此过程中不会暴露其他机密)的最佳实践是什么?
我正在尝试创建与 MS SymbolIcon 相同的自定义符号图标控件,它将获取枚举符号值作为输入,并且将从字典<Symbol, string> 集合中检索等效路径数据值。但是从 IconElement 继承的符号图标类以及我的应用程序中面临的以下相同问题。
“IconElement 不采用带有 0 个参数的构造函数”
但我已将我的构造函数标记为 extern 并用分号括起来以解决构造函数问题。
public class CustomSymbolIcon : IconElement
{
public extern CustomSymbolIcon();
}
Run Code Online (Sandbox Code Playgroud)
But my question is, I can get input from the end user as Symbol Enum and retrieved equivalent path geometry based on input from the stored dictionary. But I couldn't bind the path geometry to the path element(Targeted Custom icon class)and I can't write the template style for this class. …
WinUI 3有添加桌面通知的功能吗?
请参阅参考资料(见下文)
