0

TabControl -> ScrollViewer -> Border with pMouseLeftButtonDown ハンドラーを使用します....私の目標は、ドラッグを実装してスクロール ビューアーをスクロールすることです...カスタム スクロール ビューアーがあり、すべての 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」を手動で起動したいと思います。raiseEvent() 呼び出しの後、メソッド pMouseLeftButtonDown() が再度呼び出され、この新しいイベントがブロックされない (handled = true) ため、これは機能しているようです。問題は、UI要素がマウスイベントを取得しない=>マウスの左ボタンが押されない、つまりタブが選択されないことです...

問題はどこだ?

                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);
4

1 に答える 1

0

実際に機能するかどうかはわかりませんが、次のように変更する必要があります。

FrameworkElement el = lastPreviewMouseDownMouseButtonEventArgs.Source as FrameworkElement;

に:

FrameworkElement el = lastPreviewMouseDownMouseButtonEventArgs.OriginalSource as FrameworkElement;

おそらく、PreviewMouseButtonDownMouseButtonDownイベントの両方を発生させる必要もあります。繰り返しますが、これを行うと実際に目的が達成されるかどうかはわかりません。

代わりに、クリックされた TabItem を取得して設定してみませんIsSelected = trueか?

于 2011-08-05T21:07:40.643 に答える