当我尝试基于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>
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找边框以在IsMouseOver未设置背景时触发,请尝试将边框的背景设置为Background="Transparent".
与默认null背景相反,这将使透明背景仍然触发事件.只有将背景设置为非空值时,才会触发任何鼠标输入事件.