2017-08-07 2 views
3

IはRectangleRectangleGeometryによって定義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は、その矩形のサイズと正確に一致しますが、ストロークの太さのアニメーションはそれに影響しません(太いストロークではを実際にRectangleより少し大きくする必要があります)。 )。

どうすればいいですか?

PathStretch="Fill"プロパティは使用できません。その場合、ストロークの太さはPathの境界内でのみ増加しますが、ストロークのデフォルト動作を内側と外側の両方向に拡大したいと考えています。

さらに、Rectangleの幅がバインドされているビューモデルを変更することはできません。それは私が変更することができない外部コンポーネントです。

実際にはRectangleを取り除くことができました。私にとって重要なことは、Pathと動的に変化する幅です。

+0

あなたのビューモデルのプロパティに 'Path.Data'をバインドすることができます。 'RctWidth'が変更されるたびに、新しい' RectangleGeometry'を作成し、そのプロパティに割り当てることができます。 –

+0

@YusufTarıkGünaydın、人生が楽にできたら...残念ながら、それは外部コンポーネントだからビューモデルに触れることはできません。私は、純粋なXAMLの方法か、またはいくつかの付加されたプロパティ/ビヘイビア/まったくのいずれかを探しています。 – dymanoid

+0

おそらく、負のマージンを追加して厚さの増加効果をキャンセルすることができます。 – grek40

答えて

1

コメントしたように、内部だけに成長するストロークの厚さの影響は、負のマージンによってキャンセルできます。マージンは0〜-1(厚さ変化の半分を補う)変更する必要がある1から3までの厚さを変更するアニメーションの

、:これにより

<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"となります。

+0

まあ、それです。 'Stretch'モードで動作する簡単なソリューションです。なぜ私はアニメーションマージンを試していないのですか? – dymanoid

関連する問題