2010-05-20 4 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

+0

Set Stretch to Fill, иначе ничего не будет работать, так как он всегда будет использовать размер изображения по умолчанию. –

0

ImageBrush происходит от TileBrush, так что вы можете использовать свойство Viewport, чтобы повторить его. См. Пример this MSDN page.

+0

Я не могу представить, как это будет работать, основной TileMode сам для меня не работает, это фрагмент кода ... Pravin

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> 

You толщина линии управления и ориентации со свойством конечной точки.

+0

Этот подход работает только для фигур фиксированного размера (прямоугольник 100x100 в приведенном выше случае). Если форма может растянуться, тогда размер тире также будет растянут. Обычно это не то, что вы хотите. –

Смежные вопросы