Рейтинг@Mail.ru

Передача события прокрутки мыши родительскому элементу в WPF на примере элемента TreeView

Опубликовано в Полезные советы

Для передачи события прокрутки колеса мыши родительскому элементу, сначала определим в XAML событие PreviewMouseWheel.

<TreeView PreviewMouseWheel="ScrollingToParent" />

Теперь напишем обрабатывающий это событие метод таким способом:

''' <summary>
''' Обеспечивает передачу события прокрутки колеса мыши родительскому элементу.
''' </summary>
Private Sub ScrollingToParent(sender As Object, e As MouseWheelEventArgs)
    e.Handled = True
    Dim e2 As New MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) With {
        .RoutedEvent = UIElement.MouseWheelEvent,
        .Source = sender
    }
    Dim parent As UIElement = CType(CType(sender, Control).Parent, UIElement)
    parent.RaiseEvent(e2)
End Sub
Подробнее ...

WPF: Как получить объект из списка ListBox под указателем мыши

Опубликовано в Полезные советы

Это может понадобиться, например, при реализации функциональности DragAndDrop. Напишем метод, возвращающий объект или NULL, если объекта нет:

''' <summary>'
''' Возвращает элемент списка ListBox, находящийся под указателем мыши.'
''' </summary>'
''' <param name="lb">Список.'
''' <param name="p">Позиция курсора. Обычно e.GetPosition(lb), где е type of DragEventArgs.'
Private Function getDataFromListBox(ByVal lb As ListBox, ByVal p As Point) As Object
  Dim element As UIElement = TryCast(lb.InputHitTest(p), UIElement)
  If element IsNot Nothing Then
    Dim data As Object = DependencyProperty.UnsetValue
      Do While data Is DependencyProperty.UnsetValue
        data = lb.ItemContainerGenerator.ItemFromContainer(element)
        If data Is DependencyProperty.UnsetValue Then
          element = CType(VisualTreeHelper.GetParent(element), UIElement)
         End If
       Loop
       If data IsNot DependencyProperty.UnsetValue Then
         Return data
       End If
     End If
   Return Nothing
End Function
Подробнее ...
Подписаться на этот канал RSS