2013-06-05 14 views
14

So che posso creare un bordo tratteggiato con un rettangolo o un bordo con diverso spessore del tratto per le diverse parti:Rettangolo WPF con spessore della corsa diverso sui lati o Bordo con tratto tratteggiato?

 <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

C'è qualche cosa che posso ottenere sia:

enter image description here

?

UPDATE: questo deve riempire lo spazio nel suo genitore (diversamente dal mio esempio con dimensioni fisse), ad es. una griglia - quindi una DrawingGeometry che ha dimensioni fisse e la mia penna personale non possono essere utilizzate per ottenere questo .. può?

risposta

20

Prova questa:

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

E 'di confine, in modo che quando metti dentro la griglia, userà lo spazio disponibile e puoi impostare una larghezza diversa per ogni lato, usa il rettangolo per il pennello visivo, così puoi facilmente impostare i bordi come tratteggiati.

enter image description here

+0

Buono! Non ho mai saputo di poter definire il mio pennello in quel modo! – markmnl

1

Una soluzione hacky ma funziona è quello di coprire il lato del rettangolo tratteggiato da nascondere:

  <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

Problemi correlati