2010-05-05 8 views
5

Wir müssen Mausklicks und Drags "ignoriert" von unserem View1 haben, aber die ToolTip muss immer noch in dieser Ansicht funktionieren. Der Grund dafür ist, dass View1 in Z-Reihenfolge über View2 liegt, sodass View1 View2 rot einfärben und eine Warnung über ToolTip anzeigen kann. Die mit View1 verknüpfte QuickInfo funktioniert jedoch nicht, wenn IsHitTestVisible = "False" ist.XAML ToolTip + IsHitTestVisible = "False"

Wer weiß, dass es eine Arbeit gibt, so dass die QuickInfo beim Bewegen der Maus angezeigt wird und der Rest der Mausereignisse von View1 ignoriert wird und zu View2 geht?

Danke,

Sean

Antwort

2

Was ich das tat, ist nicht groß:

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     var parentWindow = Window.GetWindow(this); 
     var source = PresentationSource.FromVisual(parentWindow) as HwndSource; 

     source.AddHook(WndProc); 
    } 

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 
     // Handle messages... 
     if (msg == WM_MOUSEMOVE) 
     { 
     ...show tool tip if mouse is over it 
     } 
     return IntPtr.Zero; 
    } 
0

die IsHitTestVisible="False" nicht gesetzt Sie!

Gerade diese Zeilen

IsEnable = false 
ToolTipService.ShowOnDisabled="True" 
+3

IsEnable ändert den Stil der Komponente. –

2

hinzufügen Wenn jemand anderes gleiches Problem, sie es nützlich finden. Wir hatten eine Anforderung, um einige Zeilen auf Datagrid zu deaktivieren, aber gleichzeitig PFEIL-Schlüsselnavigation auf ihnen zu ermöglichen. Aus diesem Grund mussten wir auf IsHitTestVisible anstatt auf IsEnabled Eigenschaft umstellen. So konnten wir die obige Lösung der Umstellung auf IsEnabled nicht übernehmen.

Hier ist, wie ich dieses Problem gelöst habe. Ich habe eine neue angefügte Eigenschaft RowEnable für DataGridRow erstellt. Diese angefügte Eigenschaft kann an eine Viewmodel-Eigenschaft gebunden werden, um die Aktivierung und Deaktivierung von virtual zu steuern. Ich habe auch einen neuen Stil für DataGridCell erstellt, wo ich IsHitTestVisible auf false basierend auf der gleichen Viewmodel-Eigenschaft festlegen. Betrachten Sie es als eine Zeile, die die Maus/Tastatur sehen kann, aber ihre Zellen/Spalten nicht sehen kann. Das bedeutet, dass ich jetzt die Zeile basierend auf der neuen angehängten Eigenschaft RowEnabled so gestalten kann, dass sie deaktiviert/aktiviert ist. Zur gleichen Zeit kann ich Tooltips für diese Tows ansehen, die praktisch deaktiviert sind.

Hoffe das hilft !!