wpf - 当鼠标经过 ContextMenu 或验证错误时,IsMouseOver 返回 False?

标签 wpf xaml hittest ismouseover

我有一个控件,当使用触发器将 IsMouseOver 设置为 true 时,该控件会展开。在该控件中,有一些具有一些基本验证的文本框。我的问题是,当发生验证错误并且用户将鼠标悬停在文本框周围的红色边框上时(几乎保证在用户将鼠标移动到文本框中心以更改值时发生),IsMouseOver 将设置为 false 并且控件关闭.

文本框验证错误:

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding 
                Path=(Validation.Errors)[0].ErrorContent, 
                RelativeSource={x:Static RelativeSource.Self}}" />
        </Trigger>
    </Style.Triggers>
</Style>

触发显示控制:

<DataTrigger Binding="{Binding ElementName=TabControl_TabPanel, Path=IsMouseOver}" Value="True">
    <Setter Property="Visibility" Value="Visible" />
</DataTrigger>

更新: 当我右键单击文本框并打开上下文菜单时,IsMouseOver 也被设置为 False

最佳答案

就上下文菜单而言,事情非常清楚:它是一个不同的窗口(处于较低级别),因此您的控件不可能“通过”它检测到任何内容。同样,WPF 中的验证错误以复杂且令人费解的方式显示,足以说明它们也不是真正的控件的一部分。

我建议在您的场景中使用焦点事件;真的需要鼠标悬停吗?可能有一些方法可以让它发挥作用......

关于wpf - 当鼠标经过 ContextMenu 或验证错误时,IsMouseOver 返回 False?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788514/

相关文章:

c# - 使用 C# 和 WPF 在代码中绘制线条

c# - 将委托(delegate)/命令作为参数传递给 MVVM 中的另一个命令

c# - 非常不寻常的 "the given paths format is not supported"错误

wpf - 如何在WPF应用程序中以 Prism 方式向应用程序添加菜单?

wpf - 在WPF中,如何在DataGrid上显示AdornerLayer

c# - 使用来自另一个 UserControl 的 MVVM 启用/禁用按钮

silverlight - 带有复选框和流向的 Silverlight 中的 Stage 效果

.net - 检查数据网格中的双击是否单击了滚动条

ruby - 碰撞检测代码应该放在哪里?

ios - GetSublayers by Hit 测试 ios