ExtendedTreeView.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using System.Windows.Data;
  4. using System.Windows.Input;
  5. namespace SAGA.DotNetUtils.WPF.UserControl.ComboboxTreeView
  6. {
  7. public class ExtendedTreeView : TreeView
  8. {
  9. protected override DependencyObject GetContainerForItemOverride()
  10. {
  11. var childItem = ExtendedTreeViewItem.CreateItemWithBinding();
  12. childItem.OnHierarchyMouseUp += OnChildItemMouseLeftButtonUp;
  13. return childItem;
  14. }
  15. private void OnChildItemMouseLeftButtonUp(object sender, MouseEventArgs e)
  16. {
  17. if (this.OnHierarchyMouseUp != null)
  18. {
  19. this.OnHierarchyMouseUp(this, e);
  20. }
  21. }
  22. protected override void OnMouseEnter(MouseEventArgs e)
  23. {
  24. base.OnMouseEnter(e);
  25. this.Focus();
  26. }
  27. public event MouseEventHandler OnHierarchyMouseUp;
  28. }
  29. public class ExtendedTreeViewItem : TreeViewItem
  30. {
  31. public ExtendedTreeViewItem()
  32. {
  33. this.MouseLeftButtonUp += OnMouseLeftButtonUp;
  34. }
  35. void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  36. {
  37. if (this.OnHierarchyMouseUp != null)
  38. {
  39. this.OnHierarchyMouseUp(this, e);
  40. }
  41. }
  42. protected override DependencyObject GetContainerForItemOverride()
  43. {
  44. var childItem = CreateItemWithBinding();
  45. childItem.MouseLeftButtonUp += OnMouseLeftButtonUp;
  46. return childItem;
  47. }
  48. public static ExtendedTreeViewItem CreateItemWithBinding()
  49. {
  50. var tvi = new ExtendedTreeViewItem();
  51. var expandedBinding = new Binding("IsExpanded");
  52. expandedBinding.Mode = BindingMode.TwoWay;
  53. tvi.SetBinding(ExtendedTreeViewItem.IsExpandedProperty, expandedBinding);
  54. var selectedBinding = new Binding("IsSelected");
  55. selectedBinding.Mode = BindingMode.TwoWay;
  56. tvi.SetBinding(ExtendedTreeViewItem.IsSelectedProperty, selectedBinding);
  57. return tvi;
  58. }
  59. public event MouseEventHandler OnHierarchyMouseUp;
  60. }
  61. }