2010-04-23 4 views
1

J'écris un contrôle personnalisé basé sur RichTextBox qui doit pouvoir traiter les événements MouseLeftButtonDown mais ne doit pas autoriser la sélection initiée par l'utilisateur (je fais tout par programmation).Silverlight RichTextBox Désactiver la sélection de la souris

J'essayé de placer un drapeau dans MouseLeftButtonDown pour suivre en faisant glisser puis mettre en permanence la RichTextBox.Selection à rien en cas MouseMove mais l'événement de mouvement ne se déclenche qu'après avoir relâché le bouton de la souris.

Des idées pour résoudre ce problème? Merci.

Répondre

2

est ici la solution que je suis venu avec:

public class CustomRichTextBox : RichTextBox 
{ 
    private bool _selecting; 

    public CustomRichTextBox() 
    { 
     this.MouseLeftButtonDown += (s, e) => 
     { 
      _selecting = true; 
     }; 
     this.MouseLeftButtonUp += (s, e) => 
     { 
      this.SelectNone(); 
      _selecting = false; 
     }; 
     this.KeyDown += (s, e) => 
     { 
      if (e.Key == Key.Shift) 
       _selecting = true; 
     }; 
     this.KeyUp += (s, e) => 
     { 
      if (e.Key == Key.Shift) 
       _selecting = false; 
     }; 
     this.SelectionChanged += (s, e) => 
     { 
      if (_selecting) 
       this.SelectNone(); 
     }; 
    } 

    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
    { 
     base.OnMouseLeftButtonDown(e); 
     e.Handled = false; 
    } 

    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) 
    { 
     base.OnMouseLeftButtonUp(e); 
     e.Handled = false; 
    } 

    public void SelectNone() 
    { 
     this.Selection.Select(this.ContentStart, this.ContentStart); 
    } 
} 
0

Avez-vous essayé e.Handled = true dans votre gestionnaire d'événements pour voir si cela vous permet d'obtenir le comportement souhaité.

+0

La solution initiale que je pensais des travaux, mon problème était que je ne surchargez pas RichTextBox.OnMouseLeftButtonUp(). J'apprécie ton aide. – David

Questions connexes