Перетащите ScatterViewItem в RichTextBox

У меня есть ScatterView, состоящий из двух элементов: Image и RichTextBox. RichTextBox имеет AllowDrop значение true.

Когда я перетаскиваю изображение в RichTextBox, изображение полностью исчезает, но события RichTextBox DragEnter и Drop вообще не срабатывают. Ни PreviewDragEnter, ни PreviewDrop.

Я попытался установить для RichTextBox AllowDrop значение false, и изображение, как и ожидалось, оказалось поверх RichTextBox.

Как заставить события DragEnter и Drop RichTextBox срабатывать? Единственное, что срабатывает, — это событие Drop ScatterView.


person Darren Ng    schedule 05.08.2013    source источник
comment
Событие drop включено по умолчанию в WPF и должно работать в вашем коде, но похоже, что вы используете его неправильно. RichTextBox не может содержать изображение, только текст; поэтому перетаскиваемое свойство должно быть именем изображения, чего, возможно, вы не делаете. Не могли бы вы включить код, который вы пытаетесь увидеть, что вы делаете неправильно?   -  person varocarbas    schedule 05.08.2013
comment
О да. Когда я упоминаю, что он не сработал, это означает, что он не достиг точки останова в режиме отладки VS2010. Точка останова устанавливается при открытии { соответствующих событий (previewdrag, drop, ..). Событие drop работает, потому что, если я отключу его, изображение будет поверх RichTextBox, а не исчезнет. Теперь проблема в том, что он исчез, и я понятия не имею, куда он делся, потому что все события Drop вообще не срабатывали. Я постараюсь опубликовать код.   -  person Darren Ng    schedule 05.08.2013
comment
Я имел дело с эквивалентной проблемой пару недель назад, и вы правы: вы не запускаете событие drop (метод, по-видимому, никогда не достигается). Причина этого в том, что вам не нужно добавлять этот метод, поскольку приложение WPF работает с ним самостоятельно (по умолчанию), вам придется отключить это автоматическое управление (не знаю, как это сделать, но, с другой стороны, было бы бессмысленно). Я уверен, что ваша главная проблема - это перетаскивание. Опубликуйте код, который вы пытаетесь, пожалуйста.   -  person varocarbas    schedule 05.08.2013
comment
Спасибо за подтверждение, что он не сработает :) Вы имеете в виду код для обработки движения и перетаскивания в ScatterView? Для этого нет кода, я не перезаписывал метод ManipulationDelta, когда добавлял изображение в scatterview...   -  person Darren Ng    schedule 05.08.2013
comment
Вот вам и ваша проблема. Перетаскивание состоит из двух частей: перетаскивание (события в исходном элементе управления) и удаление (события в целевом элементе управления). WPF избегает второй части, но вам все равно придется иметь дело с первой частью.   -  person varocarbas    schedule 05.08.2013
comment
Я включил пример кода, чтобы помочь вам понять, как работать с этой функциональностью.   -  person varocarbas    schedule 05.08.2013


Ответы (1)


Перетаскивание с помощью элементов управления Surface (например, ScatterView) отличается от обычного перетаскивания в Windows. Перетаскиваемая вещь представляет собой 2D-форму (а не одну точку), которая может иметь несколько входов, перетаскивающих ее. Из-за этого мы не смогли встроить функцию перетаскивания Surface в существующие API перетаскивания WPF. Вместо этого вам нужно будет использовать прикрепленные события из объекта SurfaceDragDrop, такие как http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.surfacedragdrop.dragenter.aspx, которые очень похожи на эквиваленты WPF, но обеспечивают удобный для пользователей интерфейс Surface. .

person Robert Levy    schedule 05.08.2013
comment
Спасибо! SurfaceDragDrop.DragEnter прекрасно работает с RichTextBox :) - person Darren Ng; 06.08.2013