Esempio n. 1
0
        /// <summary>
        /// Traite l'évènement KeyDown de l'élément associé.
        /// </summary>
        /// <param name="sender">La source de l'évènement.</param>
        /// <param name="e">Les <see cref="System.Windows.Input.KeyEventArgs"/> contenant les données de l'évènement.</param>
        void AssociatedObject_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            // Détecte la touche entrée (ou return)
#if SILVERLIGHT
            if (e.Key == System.Windows.Input.Key.Enter)
#else
            if (e.Key == System.Windows.Input.Key.Enter || e.Key == System.Windows.Input.Key.Return)
#endif
            {
                UIElement element = null;

                // Suivant que shift est enfoncé, cela influe sur le sens de navigation
                if (e.KeyboardDevice.Modifiers == ModifierKeys.Shift)
                {
                    // On cherche l'élément précédant le courant
                    element = VisualTreeHelperExtensions.TryFindPrevious <UIElement>(AssociatedObject, tb => Interaction.GetBehaviors(tb).Any(b => b is LinkedEditBehavior));
                }
                else
                {
                    // On cherche l'élément suivant le courant
                    element = VisualTreeHelperExtensions.TryFindNext <UIElement>(AssociatedObject, tb => Interaction.GetBehaviors(tb).Any(b => b is LinkedEditBehavior));
                }

                // Si un élément est trouvé, on tente de lui donner le focus
                if (!element.Focus())
                {
                    // S'il n'est pas focusable, tente de le donner à son premier enfant qui l'est
                    element = element.GetFirstFocusableChild();
                    if (element != null)
                    {
                        element.Focus();
                    }
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Ajoute l'adorner à l'élément et l'affiche.
        /// </summary>
        /// <param name="positionGetter">Un délégué capable d'obtenir la position de la souris ou du touch.
        /// Voir <see cref="GetPositionDelegate(TouchEventArgs)"/> et <see cref="GetPositionDelegate(MouseEventArgs)"/>.</param>
        public virtual void AddAdorner(Func <IInputElement, Point> positionGetter)
        {
            Assertion.NotNull(positionGetter, "positionGetter");

            // Get the parent window
            _topWindow = (Window)VisualTreeHelperExtensions.TryFindParent <Window>(this.AssociatedObject);

            if (_topWindow != null)
            {
                // Save the initial position
                _initialMousePosition = positionGetter(_topWindow);

                // Adding events to the window to make sure dragged adorner comes up when mouse is not over a drop target.
                _topWindow.AllowDrop         = true;
                _topWindow.PreviewDragEnter += TopWindow_DragEnter;
                _topWindow.PreviewDragOver  += TopWindow_DragOver;
            }
        }