2010-05-20 173 views
5

我正在尝试创建一个填充了水平线或垂直线的矩形。 矩形的宽度是动态的,所以我不能使用图像画笔。 如果有人知道任何解决方案,请让我知道。WPF填充水平线或垂直线的矩形

回答

11

我想出了一个简单的方法,最后,我用下面的视觉刷资源来填充矩形水平,垂直或垂直虚线分别

<!--for horizontal lines-->  
    <VisualBrush 
       x:Key="HorizontalLines" 
       TileMode="Tile" Viewport="0,0,4,4" 
       ViewportUnits="Absolute" Viewbox="0,0,10,10"  
       ViewboxUnits="Absolute"> 
      <VisualBrush.Visual> 
       <Canvas> 
        <Path Stroke="Black" Data="M 0 10 l 10 0" /> 
       </Canvas> 
      </VisualBrush.Visual> 
     </VisualBrush> 

     <!--For vertical lines--> 
     <VisualBrush 
       x:Key="VerticalLines" 
       TileMode="Tile" Viewport="0,0,4,4" 
       ViewportUnits="Absolute" Viewbox="0,0,10,10"  
       ViewboxUnits="Absolute"> 
      <VisualBrush.Visual> 
       <Canvas >    
        <Path Stroke="Black" Data="M 0 0 l 0 10" />       
       </Canvas> 
      </VisualBrush.Visual> 
     </VisualBrush> 


     <!--For dotted vertical lines--> 
     <VisualBrush 
       x:Key="DottedVerticalLinesWithFill" 
       TileMode="Tile" Viewport="0,0,10,10" 
       ViewportUnits="Absolute" Viewbox="0,0,10,10"  
       ViewboxUnits="Absolute"> 
      <VisualBrush.Visual> 
       <Canvas> 
        <Path Stroke="Purple" Data="M 0 5l 0 -10" /> 
       </Canvas> 
      </VisualBrush.Visual> 
     </VisualBrush> 
0

您是否尝试过使用TileBrush?

+0

纠正我,如果我错了,你是说我应该使用ImageDrawing和DrawingBrush TILEMODE设置为“砖” ? – Pravin 2010-05-20 15:44:44

+0

将拉伸设置为填充,否则无法使用,因为它将始终使用图像的默认尺寸。 – 2010-05-20 18:31:02

0

ImageBrush派生自TileBrush因此您可以使用Viewport属性重复图像。一个例子见this MSDN page

+0

我无法想象这将如何工作,基本TileMode本身并不适合我这里是一个代码片段... Pravin 2010-05-20 16:01:08

6

您可以轻松地用一个LinearGradientBrush做到这一点:

<Rectangle Width="100" Height="100"> 
    <Rectangle.Fill> 
     <LinearGradientBrush SpreadMethod="Reflect" StartPoint="0 0" EndPoint="0 0.05"> 
      <GradientStop Offset="0.5" Color="Black"/> 
      <GradientStop Offset="0.5" Color="White"/> 
     </LinearGradientBrush> 
    </Rectangle.Fill> 
    </Rectangle> 

您控制线的厚度和方向与端点属性。

+0

此方法仅适用于固定尺寸的形状(上例为100x100矩形)。如果形状可以伸展,那么破折号的大小也会伸展。这通常不是你想要的。 – 2017-07-31 12:19:45