MainWindow.xaml.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using Avalonia;
  4. using Avalonia.Controls;
  5. using Avalonia.Controls.Notifications;
  6. using Avalonia.Input;
  7. using Avalonia.Markup.Xaml;
  8. using ControlCatalog.ViewModels;
  9. namespace ControlCatalog
  10. {
  11. public class MainWindow : Window
  12. {
  13. private WindowNotificationManager _notificationArea;
  14. private NativeMenu _recentMenu;
  15. public MainWindow()
  16. {
  17. this.InitializeComponent();
  18. this.AttachDevTools();
  19. //Renderer.DrawFps = true;
  20. //Renderer.DrawDirtyRects = Renderer.DrawFps = true;
  21. _notificationArea = new WindowNotificationManager(this)
  22. {
  23. Position = NotificationPosition.TopRight,
  24. MaxItems = 3
  25. };
  26. DataContext = new MainWindowViewModel(_notificationArea);
  27. _recentMenu = ((NativeMenu.GetMenu(this).Items[0] as NativeMenuItem).Menu.Items[2] as NativeMenuItem).Menu;
  28. var fileMenu = (NativeMenu.GetMenu(this).Items[0] as NativeMenuItem).Menu;
  29. fileMenu.NeedsUpdate += (sender, e)=>
  30. {
  31. fileMenu.Items.Clear();
  32. fileMenu.Items.Add(new NativeMenuItem("Test 1"));
  33. };
  34. var mainMenu = this.FindControl<Menu>("MainMenu");
  35. mainMenu.AttachedToVisualTree += MenuAttached;
  36. }
  37. public static string MenuQuitHeader => RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "Quit Avalonia" : "E_xit";
  38. public static KeyGesture MenuQuitGesture => RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ?
  39. new KeyGesture(Key.Q, KeyModifiers.Meta) :
  40. new KeyGesture(Key.F4, KeyModifiers.Alt);
  41. public void MenuAttached(object sender, VisualTreeAttachmentEventArgs e)
  42. {
  43. if (NativeMenu.GetIsNativeMenuExported(this) && sender is Menu mainMenu)
  44. {
  45. mainMenu.IsVisible = false;
  46. }
  47. }
  48. public void OnOpenClicked(object sender, EventArgs args)
  49. {
  50. _recentMenu.Items.Insert(0, new NativeMenuItem("Item " + (_recentMenu.Items.Count + 1)));
  51. }
  52. public void OnCloseClicked(object sender, EventArgs args)
  53. {
  54. Close();
  55. }
  56. private void InitializeComponent()
  57. {
  58. // TODO: iOS does not support dynamically loading assemblies
  59. // so we must refer to this resource DLL statically. For
  60. // now I am doing that here. But we need a better solution!!
  61. var theme = new Avalonia.Themes.Default.DefaultTheme();
  62. theme.TryGetResource("Button", out _);
  63. AvaloniaXamlLoader.Load(this);
  64. }
  65. }
  66. }