NativeEmbedPage.xaml.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using Avalonia.Platform;
  5. using Avalonia.Interactivity;
  6. using Avalonia.Controls;
  7. using Avalonia.Controls.Platform;
  8. using Avalonia.Markup.Xaml;
  9. using Avalonia;
  10. namespace ControlCatalog.Pages
  11. {
  12. public class NativeEmbedPage : UserControl
  13. {
  14. public NativeEmbedPage()
  15. {
  16. this.InitializeComponent();
  17. }
  18. private void InitializeComponent()
  19. {
  20. AvaloniaXamlLoader.Load(this);
  21. }
  22. public async void ShowPopupDelay(object sender, RoutedEventArgs args)
  23. {
  24. await Task.Delay(3000);
  25. ShowPopup(sender, args);
  26. }
  27. public void ShowPopup(object sender, RoutedEventArgs args)
  28. {
  29. new ContextMenu()
  30. {
  31. Items = new List<MenuItem>
  32. {
  33. new MenuItem() { Header = "Test" }, new MenuItem() { Header = "Test" }
  34. }
  35. }.Open((Control)sender);
  36. }
  37. protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
  38. {
  39. base.OnPropertyChanged(change);
  40. if (change.Property == BoundsProperty)
  41. {
  42. var isMobile = change.GetNewValue<Rect>().Width < 1200;
  43. this.Find<DockPanel>("FirstPanel")!.Classes.Set("mobile", isMobile);
  44. this.Find<DockPanel>("SecondPanel")!.Classes.Set("mobile", isMobile);
  45. }
  46. }
  47. }
  48. public class EmbedSample : NativeControlHost
  49. {
  50. public static INativeDemoControl? Implementation { get; set; }
  51. static EmbedSample()
  52. {
  53. }
  54. public bool IsSecond { get; set; }
  55. protected override IPlatformHandle CreateNativeControlCore(IPlatformHandle parent)
  56. {
  57. return Implementation?.CreateControl(IsSecond, parent, () => base.CreateNativeControlCore(parent))
  58. ?? base.CreateNativeControlCore(parent);
  59. }
  60. protected override void DestroyNativeControlCore(IPlatformHandle control)
  61. {
  62. base.DestroyNativeControlCore(control);
  63. }
  64. }
  65. public interface INativeDemoControl
  66. {
  67. /// <param name="isSecond">Used to specify which control should be displayed as a demo</param>
  68. /// <param name="parent"></param>
  69. /// <param name="createDefault"></param>
  70. IPlatformHandle CreateControl(bool isSecond, IPlatformHandle parent, Func<IPlatformHandle> createDefault);
  71. }
  72. }