如何动态调整具有动画笔触粗细的矩形路径?

时间:2017-08-07 08:04:00

标签: wpf xaml rectangles wpf-animation

我有一个由Rectangle定义的PathRectangleGeometry

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Rectangle Grid.Row="0" Stroke="Red" Width="{Binding RctWidth}"/>
    <Path Grid.Row="1" Stroke="Red">
        <Path.Data>
            <RectangleGeometry Rect="0,0,50,10"/>
        </Path.Data>
        <Path.Triggers>
            <EventTrigger RoutedEvent="Path.Loaded">
                <BeginStoryboard>
                    <Storyboard TargetProperty="StrokeThickness">
                        <DoubleAnimation RepeatBehavior="Forever" From="1" To="3" Duration="0:0:0.5"/>
                    </Storyboard>
                </BeginStoryboard>          
            </EventTrigger>
        </Path.Triggers>
    </Path>
</Grid>

矩形根据绑定动态更改其宽度。 矩形Path在其StrokeThickness上应用了动画。 我希望矩形Path与该矩形的大小完全匹配,但是这样的方式使得笔画粗细动画不会影响它(较粗的笔画应该使Path实际上比Rectangle - 这是预期的行为。)

我该怎么做?

请注意,我无法使用Stretch="Fill"上的Path属性。在这种情况下,笔画粗细仅在Path s范围内增长,但我想保持笔画在内外方向上的默认行为。

此外,我无法更改Rectangle的宽度所绑定的视图模型。这是一个我不允许修改的外部组件。

我实际上可以摆脱Rectangle。对我来说重要的是Path及其动态变化的宽度。

1 个答案:

答案 0 :(得分:1)

如评论所述,中风厚度仅向内部增长的影响可以通过负边距抵消。

对于将厚度从1更改为3的动画,边距需要从0更改为-1(补偿厚度变化的一半):

<BeginStoryboard>
    <Storyboard>
        <DoubleAnimation Storyboard.TargetProperty="StrokeThickness" RepeatBehavior="Forever" From="1" To="3" Duration="0:0:0.5"/>
        <ThicknessAnimation Storyboard.TargetProperty="Margin" RepeatBehavior="Forever" From="0" To="-1" Duration="0:0:0.5"/>
    </Storyboard>
</BeginStoryboard>

有了这个,您可以将解决方案与Stretch="Fill"一起使用,无论它看起来像什么。