Как сохранить форму пользовательского интерфейса при перетаскивании в WPF - PullRequest
1 голос
/ 22 марта 2010

У меня есть 2 StackPanel s - один содержит Ellipse, а другой ничего не содержит.

Я хочу перетащить Ellipse с одной панели стека на другую.Фактическое перетаскивание уже выполнено и работает нормально, однако я хотел бы знать, как сохранить эту форму Ellipse на кончике курсора мыши.

Даже пример Windows Forms был бы хорошЯ смогу адаптировать его.

1 Ответ

0 голосов
/ 22 марта 2010

Вы хотите добавить своего перетаскивателя во время перетаскивания. Я видел, как это делалось несколькими разными способами, но быстрый поиск приводит к этому поведению , которое имеет такой же хороший шаблон, как я видел. Репрезентативная выборка:

    void itemsControl_PreviewDragEnter(object sender, DragEventArgs e)
    {
        ItemsControl itemsControl = (ItemsControl)sender;
        if (e.Data.GetDataPresent(ItemType))
        {
            object data = e.Data.GetData(ItemType);
            InitializeDragAdorner(itemsControl, data, e.GetPosition(itemsControl));
            InitializeInsertAdorner(itemsControl, e);
        }
        e.Handled = true;
    }

Они красиво оборачивают представление украшения в классе DragAdorner. (Хотелось бы, чтобы я сделал это таким образом, на самом деле)

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

Кстати: после нескольких подходов я настоятельно рекомендую перенести код перетаскивания в поведение. В противном случае вы повсюду. Правильное назначение команд с MVVM может быть довольно сложным, но оно того стоит, ИМХО.

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