Как я могу создать поведение WPF, которое ссылается на несколько элементов управления? - PullRequest
1 голос
/ 29 апреля 2011

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

Какой подход я должен использовать для созданияSystem.Windows.Interactivity.Behavior, который присоединяется к обоим объектам?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Событие MouseLeftButtonDown прекрасно генерируется в ScrollViewer. Проблема в том, что ScrollViewer обрабатывает само событие (e.Handled = true). И поскольку оно уже обработано, ваше поведение не получает его.

В зависимости от того, что вы делаете, вы можете вместо этого просто использовать событие PreviewMouseLeftButtonDown. Таким образом, не имеет значения, будет ли обработчик ScrollViewer обрабатывать его, так как поведение получает его первым.

Вы также можете попытаться использовать события Drag & Drop напрямую. Но я не уверен, что это сработает.

1 голос
/ 29 апреля 2011

Вам не нужно присоединяться к элементу, чтобы иметь возможность добавить к нему обработчик событий. Если ваш AssociatedObject является ScrollViewer, вы можете получить ссылку на изображение, например:

var image = AssociatedObject.Content as Image;

и затем вы можете добавить обработчик событий мыши:

image.MouseLeftButtonDown += (s, e) => Debug.WriteLine("Clicked!");

Таким образом, объект, к которому вы привязаны, ваш связанный объект - это ваша «домашняя база», но вы можете работать с любым объектом, на который вы можете вложить руки, включая VisualTreeHelper для обхода визуального дерева.

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