Silverlight RichTextBox Отключить выбор мыши - PullRequest
1 голос
/ 23 апреля 2010

Я пишу пользовательский элемент управления на основе RichTextBox, который нуждается в способности обрабатывать MouseLeftButtonDown события, но не должен допускать выбор, инициированный пользователем (я делаю все программно).

Я пытался установить флаг в MouseLeftButtonDown для отслеживания перетаскивания, а затем непрерывно устанавливал RichTextBox.Selection в событие MouseMove, но событие перемещения не запускается, пока я не отпущу кнопку мыши.

Есть идеи, как это решить? Благодаря.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2010

Вот решение, которое я придумал:

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 голосов
/ 23 апреля 2010

Вы пробовали e.Handled = true в обработчике событий, чтобы увидеть, дает ли это вам желаемое поведение.

...