using System.ComponentModel; using System.Reflection; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; using SkiaSharp; using Svg.Skia; using ZB.MOM.WW.OtOpcUa.Client.UI.ViewModels; namespace ZB.MOM.WW.OtOpcUa.Client.UI.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LoadIcon(); } private void LoadIcon() { try { var assembly = Assembly.GetExecutingAssembly(); using var stream = assembly.GetManifestResourceStream("ZB.MOM.WW.OtOpcUa.Client.UI.Assets.app-icon.svg"); if (stream == null) return; using var svg = new SKSvg(); svg.Load(stream); if (svg.Picture == null) return; var size = 64; using var bitmap = new SKBitmap(size, size); using var canvas = new SKCanvas(bitmap); canvas.Clear(SKColors.Transparent); var bounds = svg.Picture.CullRect; var scale = Math.Min(size / bounds.Width, size / bounds.Height); canvas.Translate((size - bounds.Width * scale) / 2, (size - bounds.Height * scale) / 2); canvas.Scale(scale); canvas.DrawPicture(svg.Picture); using var image = SKImage.FromBitmap(bitmap); using var data = image.Encode(SKEncodedImageFormat.Png, 100); using var pngStream = new MemoryStream(data.ToArray()); Icon = new WindowIcon(pngStream); } catch { // Icon loading is best-effort } } protected override void OnLoaded(RoutedEventArgs e) { base.OnLoaded(e); var browseTreeView = this.FindControl("BrowseTreePanel"); var treeView = browseTreeView?.FindControl("BrowseTree"); if (treeView != null) treeView.SelectionChanged += OnTreeSelectionChanged; var contextMenu = this.FindControl("TreeContextMenu"); if (contextMenu != null) contextMenu.Opening += OnTreeContextMenuOpening; var subscribeItem = this.FindControl("SubscribeMenuItem"); if (subscribeItem != null) subscribeItem.Click += OnSubscribeClicked; var viewHistoryItem = this.FindControl("ViewHistoryMenuItem"); if (viewHistoryItem != null) viewHistoryItem.Click += OnViewHistoryClicked; var monitorAlarmsItem = this.FindControl("MonitorAlarmsMenuItem"); if (monitorAlarmsItem != null) monitorAlarmsItem.Click += OnMonitorAlarmsClicked; var browseCertPath = this.FindControl