ListView.xaml.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Windows.Input;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System;
  5. using System.ComponentModel;
  6. using System.Windows.Media;
  7. namespace CustomControls
  8. {
  9. [DesignTimeVisible(false)]
  10. public partial class ListView : System.Windows.Controls.ListView
  11. {
  12. public event EventHandler CancelEdit;
  13. public event EventHandler AcceptEdit;
  14. public event EventHandler FetchMoreItems;
  15. private void OnAcceptEdit() => AcceptEdit?.Invoke(this, EventArgs.Empty);
  16. private void OnCancelEdit() => CancelEdit?.Invoke(this, EventArgs.Empty);
  17. private void PART_TextBox_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
  18. {
  19. var tb = sender as TextBox;
  20. if (tb.IsVisible)
  21. {
  22. tb.Focus();
  23. tb.SelectAll();
  24. }
  25. }
  26. private void PART_TextBox_LostFocus(object sender, RoutedEventArgs e)
  27. {
  28. OnCancelEdit();
  29. }
  30. private void PART_TextBox_KeyDown(object sender, KeyEventArgs e)
  31. {
  32. if (e.Key == Key.Escape)
  33. {
  34. OnCancelEdit();
  35. e.Handled = true;
  36. }
  37. else if (e.Key == Key.Enter)
  38. {
  39. OnAcceptEdit();
  40. e.Handled = true;
  41. }
  42. }
  43. private void ListView_ScrollChanged(object sender, ScrollChangedEventArgs e)
  44. {
  45. if (e.VerticalOffset > 0 && e.ExtentHeight - e.ViewportHeight <= e.VerticalOffset)
  46. {
  47. FetchMoreItems?.Invoke(this, EventArgs.Empty);
  48. }
  49. }
  50. public ListView()
  51. {
  52. InitializeComponent();
  53. }
  54. }
  55. }