ContextFlyoutPage.xaml.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.ComponentModel;
  3. using Avalonia.Controls;
  4. using Avalonia.Interactivity;
  5. using ControlCatalog.ViewModels;
  6. namespace ControlCatalog.Pages
  7. {
  8. public partial class ContextFlyoutPage : UserControl
  9. {
  10. public ContextFlyoutPage()
  11. {
  12. InitializeComponent();
  13. DataContext = new ContextPageViewModel();
  14. }
  15. private ContextPageViewModel? _model;
  16. protected override void OnDataContextChanged(EventArgs e)
  17. {
  18. if (_model != null)
  19. _model.View = null;
  20. _model = DataContext as ContextPageViewModel;
  21. if (_model != null)
  22. _model.View = this;
  23. base.OnDataContextChanged(e);
  24. }
  25. private void ContextFlyoutPage_Closing(object? sender, CancelEventArgs e)
  26. {
  27. e.Cancel = CancelCloseCheckBox?.IsChecked ?? false;
  28. }
  29. private void ContextFlyoutPage_Opening(object? sender, EventArgs e)
  30. {
  31. if (e is CancelEventArgs cancelArgs)
  32. {
  33. cancelArgs.Cancel = CancelCloseCheckBox?.IsChecked ?? false;
  34. }
  35. }
  36. private void CloseFlyout(object? sender, RoutedEventArgs e)
  37. {
  38. TextBox.ContextFlyout?.Hide();
  39. }
  40. public void CustomContextRequested(object? sender, ContextRequestedEventArgs e)
  41. {
  42. if (sender is Border border && border.Child is TextBlock textBlock)
  43. {
  44. textBlock.Text = e.TryGetPosition(border, out var point)
  45. ? $"Context was requested with pointer at: {point.X:N0}, {point.Y:N0}"
  46. : "Context was requested without pointer";
  47. e.Handled = true;
  48. }
  49. }
  50. }
  51. }