Wpf 如何使用动画笔划厚度动态调整矩形路径的大小?

Wpf 如何使用动画笔划厚度动态调整矩形路径的大小?,wpf,xaml,rectangles,wpf-animation,Wpf,Xaml,Rectangles,Wpf Animation,我有一个矩形和一个由矩形几何体定义的路径: <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Rectangle Grid.Row="0" Stroke="Red" Width="{Binding RctWidth}"/> <Path

我有一个
矩形
和一个由
矩形几何体定义的
路径

<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>

矩形将根据绑定动态更改其宽度。 矩形的
路径
在其
冲程厚度
上应用了动画。 我希望矩形
路径
在大小上与该矩形完全匹配,但笔划厚度动画不会对此产生影响(较厚的笔划应使
路径
实际上比
矩形
大一点-这是预期的行为)

我该怎么做

请注意,我不能使用路径
上的
Stretch=“Fill”
属性。在这种情况下,笔划厚度将仅在
路径
的边界内增长,但我希望保持笔划在内部和外部方向上增长的默认行为

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


实际上,我可以去掉那个
矩形。对我来说,重要的是路径及其动态变化的宽度。

如前所述,笔划厚度只向内侧增长的影响可以通过负边距来抵消

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



有了它,您可以将解决方案与
Stretch=“Fill”
一起使用,不管它看起来是什么样子。

您可以将
Path.Data
绑定到视图模型中的属性。每次
RctWidth
更改时,您都可以创建一个新的
RectangleGeometry
并分配给该属性。@YusufTarıkGünaydın,如果生活如此简单的话。。。不幸的是,我无法触摸视图模型,因为它是一个外部组件。我正在寻找一种纯粹的XAML方法,或者可能是一些附加的属性/行为/任何东西。也许你可以添加负的边距,取消增加厚度的效果…我在可视化你的预期结果时遇到了困难。您是否正在尝试重新创建类似CSS的
框大小
属性的内容?如果你能给出一个问题的直观例子,以及期望的结果,我相信我们可以将其分类。:)如果在视图模型上为
Path.Data
创建一个包含
RectangleGeometry
的属性,该属性将随着
RctWidth
的变化而改变,那么我很确定,通过直接绑定到
RctWidth
并使用专用转换器,您可以获得类似的效果。好吧,就是这样。使用
拉伸
模式的简单解决方案。我真的很困惑为什么我没有尝试动画边缘。。。
<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>