Files
Semi.Avalonia/demo/Semi.Avalonia.Demo/Pages/IconDemo.axaml.cs
2024-12-20 23:48:33 +08:00

47 lines
1.5 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Notifications;
using Avalonia.Controls.Primitives;
using Avalonia.Input.Platform;
using Avalonia.Interactivity;
using Avalonia.Threading;
using Semi.Avalonia.Demo.ViewModels;
namespace Semi.Avalonia.Demo.Pages;
public partial class IconDemo : UserControl
{
private IClipboard? _clipboard;
private WindowNotificationManager? _windowNotificationManager;
public IconDemo()
{
InitializeComponent();
this.DataContext = new IconDemoViewModel();
}
protected override async void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
var vm = this.DataContext as IconDemoViewModel;
await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); });
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
var topLevel = TopLevel.GetTopLevel(this);
_windowNotificationManager = new WindowNotificationManager(topLevel) { MaxItems = 3 };
_clipboard = topLevel?.Clipboard;
}
private async void Button_Clicked(object sender, RoutedEventArgs e)
{
if (_clipboard is null) return;
if (sender is not Button { DataContext: IconItem s }) return;
await _clipboard.SetTextAsync(s.ResourceKey);
_windowNotificationManager?.Show(
new Notification("Copied", s.ResourceKey),
NotificationType.Success);
}
}