这个问题与another question有关,我几乎没有问过这个问题。
我有一个Canvas,其中包含Path和TextBlock。
<Canvas>
<Path Name="pathNodeType" StrokeThickness="1">
<Path.Style>
<Style>
<Setter Property="Path.Stroke" Value="Black" />
<Setter Property="Path.Fill" Value="LightGray" />
<Style.Triggers>
<Trigger Property="Canvas.IsMouseOver" Value="True">
<Setter Property="Path.Stroke" Value="Blue" />
<Setter Property="Path.Fill" Value="LightBlue" />
</Trigger>
</Style.Triggers>
</Style>
</Path.Style>
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigureCollection>
<PathFigure IsClosed="True" StartPoint="20,40">
<PathFigure.Segments>
<PathSegmentCollection>
<ArcSegment Size="10,10" RotationAngle="45" IsLargeArc="True" SweepDirection="Clockwise" Point="50,40" />
<LineSegment Point="50,60" />
<LineSegment Point="20,60" />
</PathSegmentCollection>
</PathFigure.Segments>
</PathFigure>
</PathFigureCollection>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock HorizontalAlignment="Left" Margin="22,40,0,0" TextWrapping="Wrap" Text="AND" VerticalAlignment="Top" FontWeight="Bold"/>
</Canvas>
当鼠标指针位于绘制路径上时,画布的IsMouseOver属性会触发路径样式。但是,当鼠标指针位于文本块上时(位于绘制路径中间的右侧),则路径样式不会像我预期的那样触发。
为什么不触发?文本块位于画布中,因此从技术上讲,它也不是画布上的鼠标指针吗?
提前感谢您提供任何帮助。
答案 0 :(得分:2)
原因是,您将Trigger的属性设置为 Canvas.IsMouseOver ,因此当Canvas为Mouser Over时会触发。 但是当你在Path的样式中设置Trigger时,这将限制在Path的区域内。
我知道IsMouseOver是一个属性,但我想以MouseEnter为例。 MouseEnter是一个路由事件,因此当鼠标悬停在 TextBlock 时,它将作为路由事件触发,TextBlock的MouseEnter事件将触发,也许TextBlock的IsMouseOver变为true,而不是Path和Canvas 。因为现在TextBlock的ZIndex是最高的。
所以,我们需要做的是让TextBlock的IsMouseOver在被徘徊时不会改变。
我们可以设置TextBlock的 IsHitTestVisible =“False”;
代码可以是这样的: 我已经测试了这段代码,它确实有用!
<Canvas Background="Transparent">
<Path Name="PathNodeType" StrokeThickness="1">
<Path.Style>
<Style TargetType="Path">
<Setter Property="Stroke" Value="Black" />
<Setter Property="Fill" Value="LightGray" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Stroke" Value="Blue" />
<Setter Property="Fill" Value="LightBlue" />
</Trigger>
</Style.Triggers>
</Style>
</Path.Style>
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigureCollection>
<PathFigure IsClosed="True" StartPoint="20,40">
<PathFigure.Segments>
<PathSegmentCollection>
<ArcSegment IsLargeArc="True"
Point="50,40"
RotationAngle="45"
Size="10,10"
SweepDirection="Clockwise" />
<LineSegment Point="50,60" />
<LineSegment Point="20,60" />
</PathSegmentCollection>
</PathFigure.Segments>
</PathFigure>
</PathFigureCollection>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
<TextBlock Margin="22,40,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontWeight="Bold"
Text="AND" IsHitTestVisible="False"
TextWrapping="Wrap" />
</Canvas>