У меня есть ListViewItem
, который я применяю Style
to, и я бы хотел поставить точную серовую строку как нижний Border
.
Как это сделать в WPF? Я могу видеть только сплошные цветные кисти.
У меня есть ListViewItem
, который я применяю Style
to, и я бы хотел поставить точную серовую строку как нижний Border
.
Как это сделать в WPF? Я могу видеть только сплошные цветные кисти.
Вы можете создать пунктирную или штриховую линию, используя прямоугольник, как в приведенном ниже коде
<Rectangle Stroke="#FF000000" Height="1" StrokeThickness="1" StrokeDashArray="4 4"
SnapsToDevicePixels="True"/>
Начните с этого и настройте свой список в соответствии со своим сценарием
Это отлично поработало в нашем приложении, позволяя нам использовать реальную границу, а не беспорядок с 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" даст вам четырехпиксельные тире.
Немного поздно для вечеринки, но для меня работало следующее решение. Это немного проще/лучше, чем оба других решения:
<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>