Подтвердить что ты не робот

Как я могу получить пунктирную или пунктирную границу в WPF?

У меня есть ListViewItem, который я применяю Style to, и я бы хотел поставить точную серовую строку как нижний Border.

Как это сделать в WPF? Я могу видеть только сплошные цветные кисти.

4b9b3361

Ответ 1

Вы можете создать пунктирную или штриховую линию, используя прямоугольник, как в приведенном ниже коде

<Rectangle Stroke="#FF000000" Height="1" StrokeThickness="1" StrokeDashArray="4 4"
                                                       SnapsToDevicePixels="True"/>

Начните с этого и настройте свой список в соответствии со своим сценарием

Ответ 2

Это отлично поработало в нашем приложении, позволяя нам использовать реальную границу, а не беспорядок с Rectangles:

<Border BorderThickness="1,0,1,1">
   <Border.BorderBrush>
      <DrawingBrush Viewport="0,0,8,8" ViewportUnits="Absolute" TileMode="Tile">
         <DrawingBrush.Drawing>
            <DrawingGroup>
               <GeometryDrawing Brush="Black">
                  <GeometryDrawing.Geometry>
                     <GeometryGroup>
                        <RectangleGeometry Rect="0,0,50,50" />
                        <RectangleGeometry Rect="50,50,50,50" />
                     </GeometryGroup>
                  </GeometryDrawing.Geometry>
               </GeometryDrawing>
            </DrawingGroup>
         </DrawingBrush.Drawing>
      </DrawingBrush>
   </Border.BorderBrush>

   <TextBlock Text="Content Goes Here!" Margin="5"/>
</Border>

Обратите внимание, что Viewport определяет размер тире в строках. В этом случае он генерирует восьмипиксельные тире. Viewport = "0,0,4,4" даст вам четырехпиксельные тире.

Ответ 3

Немного поздно для вечеринки, но для меня работало следующее решение. Это немного проще/лучше, чем оба других решения:

<Border BorderThickness="1">
  <Border.BorderBrush>
    <VisualBrush>
      <VisualBrush.Visual>
        <Rectangle StrokeDashArray="4 2" Stroke="Gray" StrokeThickness="1"
                  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>

  <TextBlock Text="Whatever" />
</Border>