Как ограничить движение курсора в приложении на основе WPF? - PullRequest
2 голосов
/ 12 мая 2009

Я работаю с приложением WPF, а точнее с Canvas с перетаскиваемыми элементами.

После перетаскивания элемента я бы хотел ограничить область перемещения курсора внутри холста, где перетаскиваются элементы.

Событие, которое может начать перетаскивание, показано ниже


private void WidgetCanvas_PreviewHeaderLeftMouseDown(object sender, MouseButtonEventArgs e)
{
     e.Handled = true;
     ... logic to figure out if this is a valid drag, blah blah blah ...

     this.IsDragging = true;
     // TODO: clip the available cursor movement to actual width of Canvas
}

В Preview-MouseUp я хотел бы просто "отсоединить" движение курсора назад к его нормальному состоянию.

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

У кого-нибудь есть лучший способ ограничить границы курсора?

Ответы [ 2 ]

3 голосов
/ 12 мая 2009

Нет чистого способа сделать это , и не очень чистые способы заставят ваш курсор мыши "дрожать" на границе области отсечения .

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

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

Удачи!

1 голос
/ 12 мая 2009

Вы должны быть в состоянии сделать это с помощью ClipCursor нативного API.

...