WPF在鼠标悬停时更改EllipseGeometry RadiusX和RadiusY

时间:2016-08-23 07:59:19

标签: c# wpf xaml

嗨我有一个圆圈,有点想让它在悬停在它上面时有弹出效果。这样做的方法是在鼠标悬停时调整半径。所以基本上我有这个:

<DataTemplate>
<Path x:Name="border" Grid.Row="0" Fill="{Binding Value.Situation, Converter={StaticResource SituationCodeToBrushConverter}}" Stretch="Fill">
   <Path.Data>
       <GeometryGroup FillRule="EvenOdd">
           <EllipseGeometry RadiusX="44" RadiusY="44" Center="50,50" />
                                        <RectangleGeometry Rect="0,0,100,100" />
       </GeometryGroup>
   </Path.Data>
</Path>

<DataTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
    <Setter Property="Fill" TargetName="border" Value="{StaticResource BrightBlueBrush}"/>
    </Trigger>
</DataTemplate.Triggers>
</DataTemplate>

你会注意到通过Trigger我可以用鼠标填充圆圈上的颜色,但是如何进入EllipseGeometry来改变RadiusX和RadiusY

1 个答案:

答案 0 :(得分:0)

由于您无法在DataTemplate的触发器中直接访问EllipseGeometry,因此您可以恢复使用Path的Tag属性的hacky技巧:

<Path x:Name="border" Tag="44" ...>
    <Path.Data>
        <GeometryGroup FillRule="EvenOdd">
            <EllipseGeometry Center="50,50"
                             RadiusX="{Binding Tag,ElementName=border}"
                             RadiusY="{Binding Tag,ElementName=border}"/>
            <RectangleGeometry Rect="0,0,100,100" />
        </GeometryGroup>
    </Path.Data>
</Path>

现在可以在Setter中设置Tag值:

<Setter Property="Tag" TargetName="border" Value="50"/>