1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo
3.样式预览
4.PositionControl.axaml
<UserControl xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"x:Class="AvaloniaDemo.Pages.PositionControl"><Grid RowDefinitions="*,*" ColumnDefinitions="*,*"><Grid Background="Green" PointerPressed = "PointerPressed"></Grid><Grid Grid.Row="1" Grid.Column="1" Background="Purple" PointerPressed = "PointerPressed"></Grid><Grid Grid.Row="0" Grid.Column="1" Background="Pink" PointerPressed = "PointerPressed"></Grid><Grid Grid.Row="1" Grid.Column="0" Background="Wheat" PointerPressed = "PointerPressed"></Grid></Grid>
</UserControl>
5.PositionControl.axaml.cs
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
using System;namespace AvaloniaDemo.Pages;public partial class PositionControl : UserControl
{PositionWindow positionWindow = new PositionWindow();public PositionControl(){InitializeComponent();Grid grid = new Grid();}private void PointerPressed(object? sender, PointerPressedEventArgs e){positionWindow = new PositionWindow();if (sender is Grid grid && this.VisualRoot is Window root){if (grid.TranslatePoint(new Point(0, 0), root) is Point p){var p1 = root.PointToScreen(p);positionWindow.Position = p1;positionWindow.ShowDialog(root);}}}
}