2013-06-05 21 views
14

Tôi biết tôi có thể tạo ra một biên giới tiêu tan với một hình chữ nhật hoặc một biên giới với độ dày đột quỵ khác nhau cho hai bên khác nhau:Hình chữ nhật WPF có độ dày đột quỵ khác nhau ở hai bên hoặc Đường viền với nét đứt quãng?

 <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

Liệu có cách nào tôi có thể đạt được cả hai:

enter image description here

?

CẬP NHẬT: Điều này cần phải lấp đầy khoảng trống trong bố mẹ của nó (không giống như ví dụ của tôi với kích thước cố định), ví dụ: một Grid - vì vậy một DrawingGeometry có kích thước cố định và Pen của riêng tôi không thể được sử dụng để đạt được điều này .. có thể nó?

Trả lời

20

Hãy thử điều này:

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

Đó là biên giới, vì vậy khi đặt bên trong của lưới nó sẽ sử dụng không gian có sẵn và bạn có thể thiết lập chiều rộng khác nhau cho mỗi bên, nó sử dụng hình chữ nhật cho bàn chải trực quan, vì vậy bạn có thể dễ dàng thiết lập các biên giới để tiêu tan.

enter image description here

+0

Tốt nhất! Tôi không bao giờ biết tôi có thể định nghĩa bàn chải của mình như thế! – markmnl

1

Một giải pháp hacky nhưng nó hoạt động là để trang trải các bên của Rectangle tiêu tan mà bạn muốn ẩn:

  <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