NativeEmbedPage.xaml.cs 2.2 KB

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