2010-05-05 41 views
5

我们需要鼠标点击并拖动View1的“忽略”,但工具提示仍然必须在该视图中运行。原因是View1在Z-Order中位于View2之上,因此View1可以将View2染成红色并通过ToolTip显示警告;但是,如果IsHitTestVisible =“False”,则伴随View1的ToolTip将不起作用。XAML ToolTip + IsHitTestVisible =“False”

任何人都知道一个解决方案,所以工具提示将显示在鼠标移动/结束和其余的鼠标事件被View1忽略并转到View2?

感谢,

肖恩

回答

2

我做这什么也不是很大:

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

不要设置IsHitTestVisible="False"

只需添加这些行

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

IsEnable改变组件的样式。 – 2012-12-17 08:41:53

2

如果其他人正面临着同样的问题,他们可能会发现它有用。 我们有要求禁用datagrid上的少数几行,但同时允许它们上的箭头键导航。这就是为什么我们必须切换到IsHitTestVisible而不是控制IsEnabled属性。所以我们不能采用以上解决方案切换到IsEnabled属性。

以下是我最终解决这个问题的方法。我为DataGridRow创建了一个新的附加属性RowEnable。此附加属性可以绑定到视图模型属性以控制启用和禁用。我还为DataGridCell创建了一种新的样式,其中我基于相同的viewmodel属性将IsHitTestVisible设置为false。因此,请考虑它像一个鼠标/键盘可以看到的行,但不能看到它的单元格/列。这意味着现在我可以根据新附加属性RowEnabled设置该行的样式来查看禁用/启用。同时,我可以查看这些几乎被禁用的拖链的工具提示。

希望这有助于!