Я работал над своим пользовательским элементом управления, полученным из TextBox, и столкнулся с проблемой, которую не могу решить прямо сейчас.Краткое описание проблемы: мое текстовое поле содержит простой текст, содержащий теги, которые я хочу сохранить согласованными - до сих пор я переопределил выделение текста, поэтому их можно было выбирать только как целый тег и т. Д. Сейчас я перешел к обработке перетаскивания.Если какой-либо текст будет добавлен в текстовое поле и он будет добавлен в тег, я хочу, чтобы вставка была перемещена до или после тега.Актуальная проблема с настройкой e.Handled = true.Если я установлю его в true, это почти сработает - текст вставляется через мою процедуру, но не удаляется из источника.Если я установлю его в false, после выполнения моего метода будет запущен метод вставки исходного текстового поля.Есть ли способ изменить маршрутизацию событий?Или я подхожу к этому неправильно с самого начала?
Код моего метода: защищенное переопределение void OnPreviewDragEnter (DragEventArgs e) {base.OnPreviewDragEnter (e);e.Handled = true;// давайте нарисуем нашу собственную карету ...}
protected override void OnPreviewDrop(DragEventArgs e)
{
base.OnPreviewDrop(e);
fieldsReady = false;
int selStart = this.SelectionStart;
int selLength = this.SelectionLength;
string droppedData = (string)e.Data.GetData(DataFormats.StringFormat);
// where to insert
Point whereDropped = e.GetPosition(this);
int droppedIndex = GetCharacterIndexFromPoint(whereDropped, true);
if (droppedIndex == this.Text.Length - 1)
{
double c = GetRectFromCharacterIndex(droppedIndex).X;
if (whereDropped.X > c)
droppedIndex++;
}
// only if the source was us, do this:
if (this.SelectionLength > 0) // this means that we are dragging from our textbox!
{
// was there any selection? if so, remove it!
this.Text = this.Text.Substring(0, selStart) + this.Text.Substring(selStart + selLength);
e.Handled = true;
// 2DO!! alter the indices depending on the removed selection
// insertion
this.Text = this.Text.Substring(0, droppedIndex) + droppedData + this.Text.Substring(droppedIndex);
}
}