2013-06-05 13 views
14

Ich weiß, dass ich eine gestrichelte Grenze mit einem Rechteck oder eine gemeinsame Grenze mit unterschiedlichen Strichstärke für verschiedene Seiten erstellen:WPF Rechteck mit unterschiedlicher Strichstärke an den Seiten oder Rand mit gestricheltem Strich?

 <StackPanel Orientation="Horizontal"> 
      <Rectangle Stroke="Green" StrokeThickness="2" StrokeDashArray="4 2" Fill="LightGreen" Height="64" Width="32" Margin="5"/> 
      <Border BorderBrush="Green" BorderThickness="2,2,2,0" Background="LightGreen" Height="64" Width="32" Margin="5" /> 
     </StackPanel> 

enter image description here

Gibt es trotzdem, ich beides erreichen kann:

enter image description here

?

UPDATE: Dies muss das Leerzeichen in seiner Eltern (im Gegensatz zu meinem Beispiel mit festen Größen), z. ein Grid - also eine DrawingGeometry, die feste Größen hat und mein eigener Stift kann nicht dazu benutzt werden .. kann es?

Antwort

20

Try this:

<Border BorderThickness="4,4,4,0" Background="LightGreen"> 
    <Border.BorderBrush> 
     <VisualBrush> 
      <VisualBrush.Visual> 
       <Rectangle 
        Stroke="Green" Fill="LightGreen" 
        StrokeDashArray="4 2" 
        StrokeThickness="4" 
        Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}" 
        Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"/> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Border.BorderBrush> 
</Border> 

Es ist Grenze, so dass, wenn Legen Sie innerhalb des Rasters den verfügbaren Platz ein, und Sie können für jede Seite eine andere Breite festlegen. Für das visuelle Pinselbild wird ein Rechteck verwendet, sodass Sie die Ränder einfach auf gestrichelt einstellen können.

enter image description here

+0

Gute Eins! Ich wusste nie, dass ich meinen eigenen Pinsel so definieren könnte! – markmnl

1

A hacky Lösung, aber es funktioniert, ist die Seite der gestrichelten Rechteck decken Sie versteckt werden sollen:

  <Grid Width="100" Height="100"> 
       <Rectangle Stroke="Green" StrokeThickness="4" StrokeDashArray="4 2" Fill="LightGreen" Margin="10"/> 
       <Rectangle StrokeThickness="0" Height="4" Margin="10" VerticalAlignment="Bottom" Fill="LightGreen"/> 
      </Grid> 

enter image description here