Avalonia使一个弹窗弹到指定位置
·
1.项目下载地址:https://gitee.com/confusedkitten/avalonia-demo
2.UI库Semi.Avalonia,项目地址 https://github.com/irihitech/Semi.Avalonia
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);
}
}
}
}
更多推荐
所有评论(0)