У мене є ListViewItem
те, що я застосовую Style
до, і я хотів би поставити пунктирну сіру лінію внизу Border
.
Як я можу це зробити у WPF? Я бачу лише однотонні пензлі.
У мене є ListViewItem
те, що я застосовую Style
до, і я хотів би поставити пунктирну сіру лінію внизу Border
.
Як я можу це зробити у WPF? Я бачу лише однотонні пензлі.
Відповіді:
Це чудово працювало в нашому додатку, дозволяючи нам використовувати справжній кордон і не возитися з прямокутниками:
<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" дасть вам тире в чотири пікселі.
Ви можете створити пунктирну або рисочку, використовуючи прямокутник, як у коді нижче
<Rectangle Stroke="#FF000000" Height="1" StrokeThickness="1" StrokeDashArray="4 4"
SnapsToDevicePixels="True"/>
Почніть із цього та налаштуйте перегляд списку відповідно до вашого сценарію
RadiusX="10" RadiusY="10"
.
Трохи пізно на вечірку, але наступне рішення спрацювало для мене. Це трохи простіше / краще, ніж обидва інші рішення:
<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>
staticresource
або dynamicresource
, щось піде не так. Я припускаю, що через Width
і Height
прив'язки не вдалося. Перша відповідь робить роботу в якості багаторазового ресурсу. Шкода. Мені дуже подобається це рішення.
Xaml
<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>