Я пишу пользовательский элемент управления на основе RichTextBox
этому нужна способность обработать MouseLeftButtonDown
события, но не должны позволять инициируемый пользователями выбор (я делаю все программно).
Я пытался установить флаг в MouseLeftButtonDown
отслеживать перетаскивание и затем непрерывно установку RichTextBox.Selection
ни к чему в MouseMove
событие, но событие перемещения не запущено, пока я не отпущу кнопку мыши.
Какие-либо идеи о том, как решить это?Спасибо.
Вот решение, которое я придумал:
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);
}
}
Вы пробовали использовать e.Handled = true
в своем обработчике событий, чтобы увидеть, дает ли это желаемое поведение.