2013-06-05 11 views
14

wiem, że mogę tworzyć obramowanie przerywane z prostokąta lub obramowanie z różnej grubości obrysu na różnych stronach:Prostokąt WPF o różnej grubości obrysu po bokach lub Obramowanie z kreskowanym obrysem?

 <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

Czy mimo to mogę osiągnąć zarówno:

enter image description here

?

AKTUALIZACJA: To musi wypełnić przestrzeń w jej rodzicu (w przeciwieństwie do mojego przykładu ze stałymi rozmiarami), np. siatka - więc rysunkowa geometria, która ma ustalone rozmiary i moje własne pióro, nie może być wykorzystana do osiągnięcia tego ... czy może to zrobić?

Odpowiedz

20

Spróbuj tego:

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

To granic, więc kiedy umieścić w siatce użyje dostępnej przestrzeni i możesz ustawić inną szerokość dla każdej strony, używa ona prostokąta do wizualnego pędzla, dzięki czemu możesz łatwo ustawić granice na przerywaną.

enter image description here

+0

Dobra! Nigdy nie wiedziałem, że mogę zdefiniować własny pędzelek! – markmnl

1

hacky rozwiązanie, ale działa to na pokrycie bok przerywaną prostokąt, który ma być ukryty:

  <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