0

我使用 TabControl -> ScrollViewer -> Border 和 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;

您可能还需要同时引发 thePreviewMouseButtonDownMouseButtonDown事件。同样,不确定这样做是否真的可以满足您的需求。

相反,为什么不直接获取被点击的 TabItem 并设置IsSelected = true

于 2011-08-05T21:07:40.643 回答