在WPF中直接在边框上检测鼠标

我有一个简单的UserControl,它的直接子元素是一个边框: –

 ...Content here...  

如何检测鼠标是否位于边界区域,即5像素边界? 当鼠标在那里时,我想将边框画笔翻转为另一种颜色。 当鼠标移动到主网格内容时,我想边框刷回来。

您可以通过在边框上放置样式并使用触发器来完成此操作。

请注意,您需要在样式中设置正常颜色,因为直接在Border上设置它会设置一个覆盖触发器的本地值。

     ...Content here...  

您还可以将Style放在资源字典中,以便可以在多个Border元素之间共享它:

     ...Content here...  

如果鼠标位于边框内,则触发器不会触发。 这是因为边框的默认背景为空,而不是透明,因此背景区域不会响应命中测试 。 如果将Border.Background属性设置为Transparent或另一个Brush,则如果鼠标位于Border上方的任何位置,则触发器将触发。

如果您想要边框的非空背景,但是您只希望在鼠标位于边框区域时触发触发器,则可以使用IsMouseDirectlyOver而不是IsMouseOver,如果鼠标位于子元素上,则将为false。 然后,您可以将网格上的背景设置为透明,以便鼠标始终在网格上。 (实际上,如果您希望内容具有背景颜色,那么在网格上设置它会更容易。)

可以使用边框中的MouseEnter和MouseLeave事件检查此项。

XAML:

  ...Content here...  

代码隐藏:

 private void border_MouseEnter(object sender, MouseEventArgs e) { Border hoveredBorder= (Border)sender; hoveredBorder.BorderBrush= Brushes.Yellow; } private void border_MouseLeave(object sender, MouseEventArgs e) { Border hoveredBorder= (Border)sender; hoveredBorder.BorderBrush= Brushes.Black; } 

编辑:我使用了Border hoveredBorder =(Border)发送者; 因此,您可以将这些事件用于多个边框。 如果您不想这样,您可以删除该行并直接获得所需的边框。

Edit2: 示例应用程序