【发布时间】:2017-08-07 08:04:00
【问题描述】:
我有一个Rectangle 和一个由RectangleGeometry 定义的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>
矩形根据绑定动态改变其宽度。
矩形Path 在其StrokeThickness 上应用了动画。
我希望矩形 Path 的大小与该矩形完全匹配,但笔画粗细动画不会影响它(较粗的笔画应该使 Path 实际上比 Rectangle 大一点- 这是预期的行为)。
我该怎么做?
请注意,我不能在Path 上使用Stretch="Fill" 属性。在这种情况下,笔画粗细只会在Paths 范围内增长,但我想保持笔画在内部和外部方向都增长的默认行为。
此外,我无法更改Rectangle 的宽度绑定到的视图模型。这是一个我不允许修改的外部组件。
我实际上可以摆脱Rectangle。对我来说重要的是Path 及其动态变化的宽度。
【问题讨论】:
-
您可以将
Path.Data绑定到视图模型中的属性。每次RctWidth更改时,您都可以创建一个新的RectangleGeometry并分配给该属性。 -
@YusufTarıkGünaydın,如果生活如此简单......不幸的是我无法触摸视图模型,因为它是一个外部组件。我正在寻找一种纯粹的 XAML 方式,或者可能是一些附加的属性/行为/任何东西。
-
或许可以加负边距,取消增加厚度的效果...
-
我无法想象您的预期结果。您是否尝试重新创建类似于 CSS 的
box-sizing属性的东西?如果您可以给出问题的直观示例以及所需的结果,我相信我们可以对其进行排序。 :) -
如果在包含
RectangleGeometryforPath.Data的视图模型上创建一个属性会随着RctWidth改变会解决你的问题,那么我很确定你可以通过绑定来实现类似的效果直接发送到RctWidth并使用专用转换器。
标签: wpf xaml rectangles wpf-animation