123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Interactivity;
- namespace MECF.Framework.UI.Core.ExtendedControls
- {
- public class BindableSelectedItemBehavior : Behavior<TreeView>
- {
- #region SelectedItem Property
- public object SelectedItem
- {
- get { return (object)GetValue(SelectedItemProperty); }
- set { SetValue(SelectedItemProperty, value); }
- }
- public static readonly DependencyProperty SelectedItemProperty =
- DependencyProperty.Register("SelectedItem", typeof(object), typeof(BindableSelectedItemBehavior), new UIPropertyMetadata(null, OnSelectedItemChanged));
- private static void OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
- {
- var item = e.NewValue as TreeViewItem;
- if (item != null)
- {
- item.SetValue(TreeViewItem.IsSelectedProperty, true);
- }
- }
- #endregion
- protected override void OnAttached()
- {
- base.OnAttached();
- this.AssociatedObject.SelectedItemChanged += OnTreeViewSelectedItemChanged;
- }
- protected override void OnDetaching()
- {
- base.OnDetaching();
- if (this.AssociatedObject != null)
- {
- this.AssociatedObject.SelectedItemChanged -= OnTreeViewSelectedItemChanged;
- }
- }
- private void OnTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
- {
- this.SelectedItem = e.NewValue;
- }
- }
- public class TreeViewHelper
- {
- private static Dictionary<DependencyObject, TreeViewSelectedItemBehavior> behaviors = new Dictionary<DependencyObject, TreeViewSelectedItemBehavior>();
- public static object GetSelectedItem(DependencyObject obj)
- {
- return (object)obj.GetValue(SelectedItemProperty);
- }
- public static void SetSelectedItem(DependencyObject obj, object value)
- {
- obj.SetValue(SelectedItemProperty, value);
- }
- // Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc...
- public static readonly DependencyProperty SelectedItemProperty =
- DependencyProperty.RegisterAttached("SelectedItem", typeof(object), typeof(TreeViewHelper), new UIPropertyMetadata(null, SelectedItemChanged));
- private static void SelectedItemChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
- {
- if (!(obj is TreeView))
- return;
- if (!behaviors.ContainsKey(obj))
- behaviors.Add(obj, new TreeViewSelectedItemBehavior(obj as TreeView));
- TreeViewSelectedItemBehavior view = behaviors[obj];
- view.ChangeSelectedItem(e.NewValue);
- }
- private class TreeViewSelectedItemBehavior
- {
- TreeView view;
- public TreeViewSelectedItemBehavior(TreeView view)
- {
- this.view = view;
- view.SelectedItemChanged += (sender, e) => SetSelectedItem(view, e.NewValue);
- }
- internal void ChangeSelectedItem(object p)
- {
- TreeViewItem item = (TreeViewItem)view.ItemContainerGenerator.ContainerFromItem(p);
- item.IsSelected = true;
- }
- }
- }
- }
|