当我尝试基于IsMouseOver属性触发时,我看到了意外的行为。
在下面的代码中,当设置了边框Background属性时,触发器将在Border对象上发生,但在未设置边框背景时将在Path对象上触发。
我已尝试在边框上设置IsHitTestVisible,但这是不行的。
我确定有这个原因,但我显然不知道。
有人可以开导我吗?
<Geometry x:Key="RightArrowGeometry">M 0 0 L 3 3 L 0 6 Z</Geometry>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<!-- <Border x:Name="TheBorder" Margin="0"> --> <!--TRIGGERS ONLY WHEN THE MOUSE IS OVER THE PATH OBJECT -->
<Border x:Name="TheBorder" Margin="0" Background="LightBlue"> <!--TRIGGERS WHEN THE MOUSE IS OVER THE BORDER OBJECT -->
<Path
x:Name="ButtonShape"
Data="{StaticResource RightArrowGeometry}"
Fill="Black"
Stretch="Uniform">
</Path>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True" SourceName="TheBorder">
<Setter Property="Margin" Value="2" TargetName="TheBorder"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:5)
如果您在未设置背景时正在寻找边框以触发IsMouseOver
,请尝试将边框的背景设置为Background="Transparent"
。
与默认的null
背景相比,这将使透明背景仍然触发事件。只有当背景设置为非空值时,才会触发任何鼠标输入事件。