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