Событие Fire MouseDown в ScrollViewer вручную WPF - PullRequest
0 голосов
/ 05 августа 2011

Я использую TabControl -> ScrollViewer -> Border с обработчиком pMouseLeftButtonDown .... Моя цель - реализовать перетаскивание в scrollviewer с прокруткой ... У меня есть пользовательский scrollviewer и я отменяю все события previewmouseleftbuttondown (обработчик на границе внутришаблон):

 private void pMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {



        if (!block)
        {



            block = true;
            lastPreviewMouseDownMouseButtonEventArgs = null;

            return;

        }
        else
        {

            block = true;

        }

        lastPreviewMouseDownMouseButtonEventArgs = null;


        mouseDragStartPoint = e.GetPosition(this);

        scrollStartOffset.X = HorizontalOffset;
        scrollStartOffset.Y = VerticalOffset;

        e.Handled = true;

        lastPreviewMouseDownMouseButtonEventArgs = e;

    }

В некоторых особых случаях я хотел бы запустить «lastPreviewMouseDownMouseButtonEventArgs» вручную.Похоже, это работает, потому что после вызова метода повыситьEvent () метод pMouseLeftButtonDown () вызывается снова, и это новое событие не будет заблокировано (handled = true).Проблема в том, что элемент пользовательского интерфейса не получает никакого события мыши => нет левой кнопки мыши, что означает отсутствие выбора вкладки ...

В чем проблема?

                FrameworkElement el = lastPreviewMouseDownMouseButtonEventArgs.Source as FrameworkElement;
                lastPreviewMouseDownMouseButtonEventArgs.Handled = false;

                Debug.WriteLine(el);

                MouseButtonEventArgs newEvent = new MouseButtonEventArgs(Mouse.PrimaryDevice, Environment.TickCount, MouseButton.Left) { RoutedEvent = FrameworkElement.MouseLeftButtonDownEvent };
                el.RaiseEvent(lastPreviewMouseDownMouseButtonEventArgs);

1 Ответ

0 голосов
/ 06 августа 2011

Я не уверен, что это на самом деле будет работать, но вам нужно изменить:

FrameworkElement el = lastPreviewMouseDownMouseButtonEventArgs.Source as FrameworkElement;

на:

FrameworkElement el = lastPreviewMouseDownMouseButtonEventArgs.OriginalSource as FrameworkElement;

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

Вместо этого, почему бы вам просто не получить TabItem, который был нажат, и установить IsSelected = true?

...