自定义BorderBrush上的剪切行为

时间:2016-04-13 13:51:32

标签: wpf xaml border

我有一个带有实心画笔的简单圆角边框:

 <Border BorderThickness="2,0,2,0" CornerRadius="10,10,10,10" BorderBrush="Green"/>

enter image description here

看起来像我期待的那样。现在,我希望边框有一个虚线:

<Border BorderThickness="2,0,2,0" CornerRadius="10,10,10,10">
      <Border.BorderBrush>
         <VisualBrush>
            <VisualBrush.Visual>
               <Rectangle StrokeThickness="1" Stroke="Green" StrokeDashArray="1 2"
                   Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}"
                   Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"
                   StrokeDashCap="Square"/>
            </VisualBrush.Visual>
          </VisualBrush>
        </Border.BorderBrush>    
  </Border>

enter image description here

以某种方式以某种奇怪的方式剪辑边框我无法理解。我认为这将是画笔的绘画方式,但我无法弄清楚任何图案。边框的内部内容(你可以部分看到的红色内容)应该没有裁剪,因为在任何其他情况下它看起来都不会以这种方式剪辑。

如果我将StrokeThickness设置得更高,我看起来更容易接受:

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

enter image description here

有人可以解释为什么这看起来很奇怪吗?如果我为矩形设置不同的宽度或高度,外观也会改变 - 这也是我不理解的方式。笔画和间隙的位置会发生变化,但不能让我理解它。

1 个答案:

答案 0 :(得分:1)

这是因为你是通过刷子做的。你看到的实际上是预期的。

@Clemens实际上帮我解释了an issue我前段时间的一个解释,只是通过善意展示一些Doc片段。

  

画笔使用其输出“绘制”或“填充”某个区域。不同的刷子具有不同类型的输出。有些画笔使用纯色绘制区域,其他画笔使用渐变,图案,图像或绘图。

     

•VisualBrush:使用Visual对象绘制区域。 VisualBrush使您可以将应用程序的一部分内容复制到另一个区域;它对于创建反射效果和放大屏幕部分非常有用。

因此被“绘制”的区域取决于它所允许的区域,在这种情况下,来自父级面板提供其中的区域result_set = db(db.item.point >= float(min_amount)).select() ,因此我们看到父级提供的可预测模式。

enter image description here

希望这会有所帮助,欢呼。