コード例 #1
0
        /// <summary>
        /// This method is invoked when the Items property changes.
        /// </summary>
        protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Remove:
                ParentTreeView?.ClearObsoleteItems(e.OldItems);
                break;

            case NotifyCollectionChangedAction.Reset:
            case NotifyCollectionChangedAction.Replace:
            case NotifyCollectionChangedAction.Add:
            case NotifyCollectionChangedAction.Move:
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #2
0
        /// <summary>
        /// Raises the <see cref="UIElement.MouseDown"/> event.
        /// </summary>
        /// <param name="e">
        /// The <see cref="MouseButtonEventArgs"/> instance containing the event data.
        /// </param>
        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            base.OnMouseDown(e);

            if (e.Handled || _header == null || !_header.IsMouseOver)
            {
                return;
            }

            if (e.ChangedButton == MouseButton.Left || (e.ChangedButton == MouseButton.Right && !IsSelected))
            {
                e.Handled = true;
                ParentTreeView?.MoveSelection(this);
            }
        }
コード例 #3
0
        /// <summary>
        /// Raises the <see cref="UIElement.KeyDown"/> event.
        /// </summary>
        /// <param name="e">
        /// The <see cref="KeyEventArgs"/> instance containing the event data.
        /// </param>
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException(nameof(e));
            }

            base.OnKeyDown(e);

            if (e.Handled)
            {
                return;
            }

            // TODO: Consider FlowDirection for Left/Right.
            switch (e.Key)
            {
            case Key.Left:
            case Key.Subtract:
                if (CanExpand && IsEnabled && IsExpanded)
                {
                    e.Handled  = true;
                    IsExpanded = false;
                }
                break;

            case Key.Add:
            case Key.Right:
                if (CanExpand && IsEnabled && !IsExpanded)
                {
                    e.Handled  = true;
                    IsExpanded = true;
                }
                break;
            }

            if (!e.Handled)
            {
                ParentTreeView?.HandleKeyDown(this, e);
            }
        }
コード例 #4
0
ファイル: treenode.cs プロジェクト: lokygb/FrontDesk
 /// <summary>
 /// Determine if the current node is an L, T, or Root junction.
 /// Note: This code is essentially duplicated from the client behavior.
 /// </summary>
 /// <returns>A character defining the type of junction.</returns>
 protected char CalcJunction()
 {
     if (Parent is TreeView && GetPreviousSibling() == null)
     {
         // Get index of node and add 1 to the last value
         string strIndex  = GetNodeIndex();
         int    iIndexPos = strIndex.LastIndexOf('.');
         int    iIndexVal = Convert.ToInt32(strIndex.Substring(iIndexPos + 1)) + 1;
         strIndex = strIndex.Substring(0, iIndexPos + 1) + iIndexVal.ToString();
         // if the node exists, we're an "F" node.
         if (ParentTreeView.GetNodeFromIndex(strIndex) != null)
         {
             return('F');
         }
         else
         {
             return('R');
         }
     }
     else
     {
         TreeNodeCollection col;
         if (Parent is TreeView)
         {
             col = ((TreeView)Parent).Nodes;
         }
         else
         {
             col = ((TreeNode)Parent).Nodes;
         }
         int i = col.IndexOf(this) + 1;
         if (i < col.Count)
         {
             return('T');
         }
         return('L');
     }
 }
コード例 #5
0
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            //if (e.Property.Name == "IsEditing")
            //{
            //    if ((bool)e.NewValue == false)
            //    {
            //        StopEditing();
            //    }
            //    else
            //    {
            //        ParentTreeView.IsEditingManager.SetEditedObject(this);
            //    }
            //}

            if (ParentTreeView != null && e.Property.Name == "IsSelected")
            {
                if (ParentTreeView.SelectedItems.Contains(DataContext) != IsSelected)
                {
                    ParentTreeView.SelectFromProperty(this, IsSelected);
                }
            }

            base.OnPropertyChanged(e);
        }
コード例 #6
0
 private bool StopEditing()
 {
     return(ParentTreeView.StopEditing());
 }
コード例 #7
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (!e.Handled)
            {
                Key key = e.Key;
                switch (key)
                {
                case Key.Left:
                    if (IsExpanded)
                    {
                        IsExpanded = false;
                    }

                    e.Handled = true;
                    break;

                case Key.Right:
                    IsExpanded = true;
                    e.Handled  = true;
                    break;

                case Key.Up:
                    ParentTreeView.SelectPreviousFromKey();
                    e.Handled = true;
                    break;

                case Key.Down:
                    ParentTreeView.SelectNextFromKey();
                    e.Handled = true;
                    break;

                case Key.Add:
                    if (IsExpandableOnInput && !IsExpanded)
                    {
                        IsExpanded = true;
                    }

                    e.Handled = true;
                    break;

                case Key.Subtract:
                    if (IsExpandableOnInput && IsExpanded)
                    {
                        IsExpanded = false;
                    }

                    e.Handled = true;
                    break;

                case Key.F2:
                    e.Handled = StartEditing();
                    break;

                case Key.Escape:
                case Key.Return:
                    StopEditing();
                    e.Handled = true;
                    break;

                case Key.Space:
                    ParentTreeView.SelectCurrentBySpace();
                    e.Handled = true;
                    break;

                case Key.Home:
                    ParentTreeView.SelectFirst();
                    e.Handled = true;
                    break;

                case Key.End:
                    ParentTreeView.SelectLast();
                    e.Handled = true;
                    break;
                }
            }
        }
コード例 #8
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (!e.Handled)
            {
                Key key = e.Key;
                switch (key)
                {
                case Key.Left:
                    if (IsExpanded)
                    {
                        IsExpanded = false;
                    }
                    else
                    {
                        ParentTreeView.Selection.SelectParentFromKey();
                    }
                    e.Handled = true;
                    break;

                case Key.Right:
                    if (CanExpand)
                    {
                        if (!IsExpanded)
                        {
                            IsExpanded = true;
                        }
                        else
                        {
                            ParentTreeView.Selection.SelectNextFromKey();
                        }
                    }
                    e.Handled = true;
                    break;

                case Key.Up:
                    ParentTreeView.Selection.SelectPreviousFromKey();
                    e.Handled = true;
                    break;

                case Key.Down:
                    ParentTreeView.Selection.SelectNextFromKey();
                    e.Handled = true;
                    break;

                case Key.Home:
                    ParentTreeView.Selection.SelectFirstFromKey();
                    e.Handled = true;
                    break;

                case Key.End:
                    ParentTreeView.Selection.SelectLastFromKey();
                    e.Handled = true;
                    break;

                case Key.PageUp:
                    ParentTreeView.Selection.SelectPageUpFromKey();
                    e.Handled = true;
                    break;

                case Key.PageDown:
                    ParentTreeView.Selection.SelectPageDownFromKey();
                    e.Handled = true;
                    break;

                case Key.A:
                    if (e.KeyboardDevice.Modifiers == ModifierKeys.Control)
                    {
                        ParentTreeView.Selection.SelectAllFromKey();
                        e.Handled = true;
                    }
                    break;

                case Key.Add:
                    if (CanExpandOnInput && !IsExpanded)
                    {
                        IsExpanded = true;
                    }
                    e.Handled = true;
                    break;

                case Key.Multiply:
                    if (CanExpandOnInput && !IsExpanded)
                    {
                        IsExpanded = true;
                        ParentTreeView.RecursiveExpand(this);
                    }
                    e.Handled = true;
                    break;

                case Key.Subtract:
                    if (CanExpandOnInput && IsExpanded)
                    {
                        IsExpanded = false;
                    }
                    e.Handled = true;
                    break;

                case Key.F2:
                    if (ParentTreeView.AllowEditItems && ContentTemplateEdit != null && IsFocused && IsEditable)
                    {
                        IsEditing = true;
                        e.Handled = true;
                    }
                    break;

                case Key.Escape:
                    StopEditing();
                    e.Handled = true;
                    break;

                case Key.Return:
                    FocusHelper.Focus(this, true);
                    IsEditing = false;
                    e.Handled = true;
                    break;

                case Key.Space:
                    ParentTreeView.Selection.SelectCurrentBySpace();
                    e.Handled = true;
                    break;
                }
            }
        }
コード例 #9
0
ファイル: TreeViewItem.cs プロジェクト: Aggror/Stride
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.Handled)
            {
                return;
            }

            switch (e.Key)
            {
            case Key.Add:
                if (CanExpandOnInput && !IsExpanded)
                {
                    SetCurrentValue(IsExpandedProperty, true);
                    e.Handled = true;
                }
                break;

            case Key.Subtract:
                if (CanExpandOnInput && IsExpanded)
                {
                    SetCurrentValue(IsExpandedProperty, false);
                    e.Handled = true;
                }
                break;

            case Key.Left:
            case Key.Right:
                if (LogicalLeft(e.Key))
                {
                    if (CanExpandOnInput && IsExpanded)
                    {
                        if (IsFocused)
                        {
                            SetCurrentValue(IsExpandedProperty, false);
                        }
                        else
                        {
                            Focus();
                        }
                    }
                    else
                    {
                        ParentTreeView.SelectParentFromKey();
                    }
                }
                else
                {
                    if (CanExpandOnInput)
                    {
                        if (!IsExpanded)
                        {
                            SetCurrentValue(IsExpandedProperty, true);
                        }
                        else
                        {
                            ParentTreeView.SelectNextFromKey();
                        }
                    }
                }
                e.Handled = true;
                break;

            case Key.Down:
                ParentTreeView.SelectNextFromKey();
                e.Handled = true;
                break;

            case Key.Up:
                ParentTreeView.SelectPreviousFromKey();
                e.Handled = true;
                break;

            case Key.F2:
                e.Handled = StartEditing();
                break;

            case Key.Escape:
            case Key.Return:
                StopEditing();
                e.Handled = true;
                break;

            case Key.Space:
                ParentTreeView.SelectCurrentBySpace();
                e.Handled = true;
                break;

            case Key.Home:
                ParentTreeView.SelectFirst();
                e.Handled = true;
                break;

            case Key.End:
                ParentTreeView.SelectLast();
                e.Handled = true;
                break;
            }
        }
コード例 #10
0
        protected override Task OnParametersSetAsync()
        {
            ParentTreeView.AddTreeNodeBinding(this);

            return(base.OnParametersSetAsync());
        }
コード例 #11
0
 void TreeViewItemExtended_Expanded(object sender, RoutedEventArgs e)
 {
     ParentTreeView.InvokeContainerExpanded(sender, e);
 }
コード例 #12
0
 /// <summary>
 /// Invoked whenever an unhandled <see cref="E:System.Windows.UIElement.GotFocus" /> event reaches this element in its route.
 /// </summary>
 /// <param name="e">The <see cref="T:System.Windows.RoutedEventArgs" /> that contains the event data.</param>
 protected override void OnGotFocus(RoutedEventArgs e)
 {
     ParentTreeView.Select(this, true);
     base.OnGotFocus(e);
 }
コード例 #13
0
 /// <summary>
 /// Invoked whenever an unhandled <see cref="UIElement.GotFocus"/> event reaches this
 /// element in its route.
 /// </summary>
 /// <param name="e">
 /// The <see cref="RoutedEventArgs"/> that contains the event data.
 /// </param>
 protected override void OnGotFocus(RoutedEventArgs e)
 {
     ParentTreeView?.HandleGotFocus(this);
     base.OnGotFocus(e);
 }
コード例 #14
0
 /// <summary>
 /// Invoked when the <see cref="ItemsControl.Items"/> property changes.
 /// </summary>
 /// <param name="e">Information about the change.</param>
 protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
 {
     base.OnItemsChanged(e);
     ParentTreeView?.HandleItemsChanged(this, e);
 }
コード例 #15
0
 /// <summary>
 /// TODO: This is a little stinky...
 /// </summary>
 internal void ChildSelected(TreeViewItem child)
 {
     ParentTreeViewItem?.ChildSelected(child);
     ParentTreeView?.ChildSelected(child);
 }
コード例 #16
0
 void Node_Collapsing(object sender, EventArgs e)
 {
     ParentTreeView.HandleCollapsing(Node);
 }
コード例 #17
0
        protected override void OnSelected(RoutedEventArgs e)
        {
            base.OnSelected(e);
            RequestBringIntoView += TreeViewItemEx_RequestBringIntoView;

            if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
            {
                ItemsControl items = ParentItemsControl;

                bool hasMultipleSelected = false;
                foreach (object item in items.Items)
                {
                    TreeViewItemEx ex = items.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItemEx;
                    if (ex != null &&
                        ex.IsMultipleSelected)
                    {
                        hasMultipleSelected = true;
                        break;
                    }
                }
                if (hasMultipleSelected)
                {
                    ParentTreeView.HandlingMultipleSelected = true;
                    bool select = false;
                    foreach (object item in items.Items)
                    {
                        TreeViewItemEx ex = items.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItemEx;
                        if (ex == null)
                        {
                            continue;
                        }
                        if (select)
                        {
                            if (ReferenceEquals(ex, this) ||
                                ex.IsMultipleSelected)
                            {
                                ex.IsMultipleSelected = true;
                                break;
                            }
                            ex.IsMultipleSelected = true;
                        }
                        else
                        {
                            if (ReferenceEquals(ex, this) ||
                                ex.IsMultipleSelected)
                            {
                                ex.IsMultipleSelected = true;
                                select = true;
                            }
                        }
                    }
                }
            }
            else
            {
                ParentTreeView?.ClearMultipleSelection();
                IsMultipleSelected = true;
                if (ParentTreeView != null)
                {
                    ParentTreeView.HandlingMultipleSelected = true;
                }
            }
        }