2017-08-07 1 views
3

Ich habe ein RectanglePath und ein durch ein RectangleGeometry definiert:Wie wird ein rechteckiger Pfad dynamisch mit der Stärke des animierten Strichs bemaßt?

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

Das Rechteck ändert seine Breite dynamisch an die Bindung nach. Die rechteckige Path hat eine Animation auf seine StrokeThickness angewendet. Ich möchte die rechteckige Path genau dieses Rechteck in der Größe, aber in einer solchen Weise, dass die Strichstärke Animation nicht beeinflussen, dass (der dickere Strich sollte die Path tatsächlich ein bisschen größer als die Rectangle machen - das ist das beabsichtigte Verhalten).

Wie kann ich das tun?

Beachten Sie, dass ich die Stretch="Fill" Eigenschaft auf der Path nicht verwenden kann. In diesem Fall wird die Strichstärke nur innerhalb der Grenzen wachsen, aber ich möchte das Standardverhalten von Strichs sowohl in der inneren als auch in der äußeren Richtung beibehalten.

Desweiteren kann ich das Ansichtsmodell, an das die Breite Rectangle gebunden ist, nicht ändern. Es ist eine externe Komponente, die ich nicht ändern darf.

Ich könnte tatsächlich Rectangle loswerden. Das Wichtigste für mich ist die Path und ihre dynamisch wechselnde Breite.

+0

Sie können 'Path.Data' an eine Eigenschaft in Ihrem Ansichtsmodell binden. Jedes Mal, wenn sich 'RctWidth' ändert, können Sie eine neue' RectangleGeometry' erstellen und dieser Eigenschaft zuweisen. –

+0

@ YusufTarıkGünaydın, wenn das Leben so einfach wäre ... Leider kann ich das Ansichtsmodell nicht berühren, weil es eine externe Komponente ist. Ich suche entweder nach einem reinen XAML-Weg oder nach einigen angehängten Eigenschaften/Verhaltensweisen/was auch immer. – dymanoid

+0

Vielleicht können Sie negative Ränder hinzufügen, die Wirkung der erhöhten Dicke ... – grek40

Antwort

1

Wie bereits erwähnt, kann die Auswirkung der Strichstärke, die nur nach innen wächst, durch negative Ränder aufgehoben werden.

Für eine Animation, die die Dicke von 1 bis 3, die Marge von 0 bis -1 (Ausgleich für die Hälfte der Dickenänderung) ändern muss verändert:

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

Mit diesem können Sie Ihr verwenden Lösung mit Stretch="Fill", wie auch immer es aussehen könnte.

+0

Nun, das ist es. Eine einfache Lösung, die mit dem Modus "Stretch" arbeitet. Es verwirrt mich wirklich, warum ich den animierten Rand nicht ausprobiert habe ... – dymanoid

Verwandte Themen