我们的View1需要鼠标点击和拖动“忽略”,但工具提示仍必须在该视图中运行。原因是View1在Z-Order中高于View2,因此View1可以将View2着色为红色并通过ToolTip显示警告;但是,如果IsHitTestVisible =“False”,View1附带的工具提示将不起作用。
任何人都知道一个解决方法,因此工具提示将在鼠标移动/结束时显示,其余的鼠标事件将被View1忽略并转到View2?
谢谢,
肖恩
答案 0 :(得分: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;
}
答案 1 :(得分:2)
如果其他人遇到同样的问题,他们可能会觉得有帮助。
我们要求在datagrid上禁用几行,但同时允许对它们进行ARROW键导航。这就是我们必须切换到IsEnabled
而不是控制IsEnabled
属性的原因。所以我们不能采用上述切换到RowEnable
属性的解决方案。
以下是我最终解决此问题的方法。我为DataGridRow
创建了一个新的附加属性virtual
。此附加属性可以绑定到viewmodel属性以控制DataGridCell
启用和禁用。我还为IsHitTestVisible
创建了一种新样式,我根据相同的viewmodel属性将false
设置为RowEnabled
。因此,请将其视为鼠标/键盘可以看到的行,但无法看到其单元格/列。这意味着现在我可以根据新的附加属性<ItemGroup>
<None Include="somefile.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
设置行的样式,使其看起来已禁用/启用。同时,我可以查看几乎禁用的这些拖动的工具提示。
希望这会有所帮助!!
答案 2 :(得分:0)
请勿设置IsHitTestVisible="False"
!
只需添加这些行
IsEnable = false
ToolTipService.ShowOnDisabled="True"