WPF矩形填充水平或垂直线

时间:2010-05-20 15:10:32

标签: wpf drawing

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

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

您可以使用EndPoint属性控制线条粗细和方向。

答案 2 :(得分:0)

您是否尝试过使用TileBrush?

答案 3 :(得分:0)

ImageBrush派生自TileBrush,因此您可以使用Viewport属性重复图片。有关示例,请参阅this MSDN page