feat: initialize dialog.

This commit is contained in:
rabbitism
2024-01-19 15:31:30 +08:00
parent cb89dc2b26
commit 0e91c844a7
4 changed files with 73 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
using Avalonia.Controls;
namespace Ursa.Controls;
public static class DialogBox
{
public static async Task ShowAsync()
{
return;
}
public static async Task ShowAsync<TView, TViewModel>(TViewModel vm)
where TView: Control, new()
where TViewModel: new()
{
TView t = new TView();
t.DataContext = vm;
return;
}
}

View File

@@ -0,0 +1,8 @@
using Avalonia.Controls;
namespace Ursa.Controls;
public class DialogControl: ContentControl
{
}

View File

@@ -0,0 +1,39 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Utilities;
namespace Ursa.Controls;
public class DialogHost: Canvas
{
private Point _lastPoint;
protected override void OnPointerMoved(PointerEventArgs e)
{
base.OnPointerMoved(e);
if (e.Source is DialogControl item)
{
if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed)
{
var p = e.GetPosition(this);
var left= p.X - _lastPoint.X;
var top = p.Y - _lastPoint.Y;
left = MathUtilities.Clamp(left, 0, Bounds.Width - item.Bounds.Width);
top = MathUtilities.Clamp(top, 0, Bounds.Height - item.Bounds.Height);
Canvas.SetLeft(item, left);
Canvas.SetTop(item, top);
}
}
}
protected override void OnPointerPressed(PointerPressedEventArgs e)
{
base.OnPointerPressed(e);
if (e.Source is DialogControl item)
{
_lastPoint = e.GetPosition(item);
}
}
}

View File

@@ -0,0 +1,6 @@
namespace Ursa.Controls;
public interface IDialogContext
{
}