Как указать допустимые цели драже и дропа? - PullRequest
1 голос
/ 12 октября 2011

Я рассматриваю дизайн пользовательского интерфейса (с использованием WPF), но я не уверен, как реализовать критическую функцию: пользователь будет распределять потребности по ресурсам. Есть несколько правил относительно того, какие назначения могут быть сделаны, такие как совместимость и доступность. Я хотел бы отобразить список ресурсов и список потребностей. Пользователь может выполнить назначение, перетащив нужную информацию и поместив ее на ресурс.

Что я хотел бы сделать, это показать пользователю, какие возможные назначения могут быть сделаны, выделив все назначаемые ресурсы для данной потребности. Это должно быть сделано при перетаскивании любой данной потребности.

(Мне удобно выполнять выделение, используя свойство ресурса ViewModels и триггеры в XAML, а также выполняя действие перетаскивания.)

Я не вижу событий, характерных для перетаскивания, запуска или остановки; они либо относятся к элементу источника, либо к элементам, которые активно перетаскиваются. Как оценить метод оценки совместимости для каждого элемента ресурса при запуске перетаскивания?

EDIT:

Поскольку я думаю об этом больше, возможно, было бы лучше выполнить функцию выделения при выборе элемента, а не о начале перетаскивания. Поскольку элементы обычно находятся в ListViews или TreeViews, перетаскивание также приведет к выбору элемента. Кроме того, пользователю не нужно будет инициировать и удерживать перетаскивание при рассмотрении своего выбора. Поскольку список целей может быть длинным, пользователю может понадобиться прокрутить, чтобы найти ту, которую он хочет, что непрактично при перетаскивании.

Я могу легко прослушивать события SelectionChanged, чтобы оценить потенциальные цели падения.

Ответы [ 2 ]

0 голосов
/ 14 октября 2011

Несмотря на то, что я обновил вопрос, планируя использовать другой подход пользовательского интерфейса (выделение при выборе), я все еще размышляю над тем, что я воспринимаю как недостаток в службах перетаскивания WPF.понял, что начало перетаскивания вызывает мой код для получения данных, которые перетаскивают.Я могу делать все, что захочу, включая запуск любых дополнительных эффектов пользовательского интерфейса!При этом кажется немного глупым ожидать такой функциональности в классе DragDrop ...

0 голосов
/ 12 октября 2011

В WPF сервисы перетаскивания хорошо определены вместе с указанием применимости которых являются допустимыми перетаскиваемыми и сбрасываемыми визуальными эффектами для перетаскиваемых данных.

http://msdn.microsoft.com/en-us/library/ms742859.aspx

EDIT

В соответствии с вашим требованием, вы должны указать \ выделите \ сфокусируйте допустимые объекты для сбрасывания, когда начинается перетаскивание.

Для этого отбрасываемые визуальные элементы должны регистрироваться сами для того типа данных, которые перетаскиваются. Таким образом, все цели отбрасывания будут уведомлены , когда такие данные, для которых они зарегистрированы, будут перетаскиваться, то есть при вызове DragDrop.DoDragDrop(..., <dragged data>, ...).

Теперь это сложно, но вы можете использовать Clipboard services для хранения перетаскиваемых данных. Зарегистрированные целевые изображения будут уведомлены той же службой буфера обмена, когда такие данные будут добавлены в буфер обмена. Вы можете иметь команду CanExecute(), которая постоянно выполняется в представлении перетаскивания и проверяет данные буфера обмена зарегистрированного типа данных. Если это так, то для некоторого логического свойства, основанного на модели представления, который был присоединен ко всем этим действительным целям отбрасывания, установлено значение true, которое будет подсвечивать их через присоединенное поведение.

В случае отступления (потерянное перетаскивание) буфер обмена должен быть очищен.

Но, конечно, это легче сказать, чем сделать .... но стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...