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>