如何在WPF中实现虚线或虚线边框?

dan*_*dan 68 wpf styles border listviewitem

我有一个ListViewItem我正在申请一个Style,我想把一个虚线灰色线作为底部Border.

我怎么能在WPF中这样做?我只能看到纯色画笔.

Ran*_*ard 108

这在我们的应用程序中运行得很好,允许我们使用真正的边框而不是乱七八糟的:

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,视口确定行中短划线的大小.在这种情况下,它会生成八个像素的短划线.Viewport ="0,0,4,4"会给你四个像素的破折号.


bij*_*iju 89

您可以使用矩形创建虚线或虚线,如下面的代码所示

<Rectangle Stroke="#FF000000" Height="1" StrokeThickness="1" StrokeDashArray="4 4"
                                                       SnapsToDevicePixels="True"/>
Run Code Online (Sandbox Code Playgroud)

开始使用此功能并根据您的方案自定义列表视图

  • @Jordan使用`RadiusX ="10"RadiusY ="10"`. (5认同)
  • 有没有办法用圆角做到这一点? (2认同)

dot*_*NET 18

派对有点晚了,但以下解决方案对我有用.它比其他两种解决方案更简单/更好:

<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>
Run Code Online (Sandbox Code Playgroud)

  • ...然而!如果您将此画笔用作“静态资源”或“动态资源”,则会出现问题。我认为是由于“宽度”和“高度”绑定失败。第一个答案*确实*可以作为可重复使用的资源。遗憾。我真的很喜欢这个解决方案。 (2认同)

Dre*_*Ria 6

沙姆尔

<Grid>
<Grid.RowDefinitions><RowDefinition Height="auto"/></Grid.RowDefinitions>
<Grid.ColumnDefinitions><ColumnDefinition Width="auto"/></Grid.ColumnDefinitions>
<Rectangle RadiusX="9" RadiusY="9" Fill="White" Stroke="Black" StrokeDashArray="1,2"/>
<TextBlock Padding = "4,2" Text="Whatever"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)