我对 WinUi3 比较陌生。我的目标是创建一个简单的bridge,以便在例如内部使用本机组件。 Java 项目,以便您可以在屏幕上的特定位置创建并显示
MenuFlyout
。
我厌倦了在
menuFlyout.ShowAt(null, new Point(0, 0));
上将 null 作为 UIElement 传递,但这会导致错误。
这是我尝试过的:
MenuFlyout menuFlyout = new();
MenuFlyoutItem menuItem = new(){ Text = "Test Exit" };
menuItem.Click += (sender, e) => { m_window.Close(); };
menuFlyout.Items.Add(menuItem);
menuFlyout.ShouldConstrainToRootBounds = false;
menuFlyout.ShowAt(null, new Point(0, 0));
使用 WinUIEx NuGet 包可以轻松更改窗口的大小:
MainWindow.xaml
<ex:WindowEx
xmlns:ex="using:WinUIEx"
x:Class="WinUIApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:WinUIApp3"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid
x:Name="RootGrid"
Loaded="Grid_Loaded" />
</ex:WindowEx>
MainWindow.xaml.cs
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Windows.Foundation;
using WinUIEx;
namespace WinUIApp3;
public sealed partial class MainWindow : WindowEx
{
public MainWindow()
{
InitializeComponent();
IsTitleBarVisible = false;
MinWidth = 0;
MinHeight = 0;
Width = 0;
Height = 0;
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
MenuFlyout menuFlyout = new();
MenuFlyoutItem menuItem = new() { Text = "Test Exit" };
menuItem.Click += (sender, e) => { this.Close(); };
menuFlyout.Items.Add(menuItem);
menuFlyout.ShouldConstrainToRootBounds = false;
menuFlyout.ShowAt(RootGrid, new Point(0, 0));
}
}