gpt4 book ai didi

c# - 在 WPF 中检测鼠标直接越过边框

转载 作者:行者123 更新时间:2023-11-30 19:49:07 25 4
gpt4 key购买 nike

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

 <Border x:Name="LayoutRoot" BorderThickness="5" BorderBrush="Transparent">
<Grid>...Content here...</Grid>
</Border>

如何检测鼠标是否在边框区域上方,即 5 像素边框本身?当鼠标在那里时,我想将边框画笔翻转为另一种颜色。当鼠标移动到主要网格内容时,我想用边框刷向后翻转。

最佳答案

您可以通过在边框上放置样式并使用 Trigger 来实现。

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

<Border x:Name="LayoutRoot" BorderThickness="5">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>...Content here...</Grid>
</Border>

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

<UserControl.Resources>
<Style TargetType="Border" x:Key="borderGreenOnHover">
<Setter Property="BorderBrush" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Border x:Name="LayoutRoot" BorderThickness="5"
Style="{StaticResource borderGreenOnHover}">
<Grid>...Content here...</Grid>
</Border>

如果鼠标在边框内,触发器将不会触发。这是因为 Border 默认的 Background 是 null,不是 Transparent,所以背景区域不会响应 hit testing。如果将 Border.Background 属性设置为 Transparent 或另一个 Brush,则当鼠标位于 Border 上方的任何位置时触发器将触发。

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

关于c# - 在 WPF 中检测鼠标直接越过边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com