Создать шаблон штриховки в WPF
Мне удалось создать шаблоны полос в WPF, но как я могу создать такой шаблон в XAML? Есть ли подобная кисть по умолчанию для этого в WPF?
2 ответа
Вы можете сделать это в XAML, используя VisualBrush
, Вам нужно только указать значения данных для Path
, например:
XAML
<Window.Resources>
<VisualBrush x:Key="MyVisualBrush" TileMode="Tile" Viewport="0,0,15,15" ViewportUnits="Absolute" Viewbox="0,0,15,15" ViewboxUnits="Absolute">
<VisualBrush.Visual>
<Grid Background="Black">
<Path Data="M 0 15 L 15 0" Stroke="Gray" />
<Path Data="M 0 0 L 15 15" Stroke="Gray" />
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Window.Resources>
<Grid Background="{StaticResource MyVisualBrush}">
<Label Content="TEST" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
Output
Для конвертации Image
использовать векторную графику (путь) Inkscape
, что бесплатно и очень полезно. Для получения дополнительной информации см. Эту ссылку:
Vectorize Bitmaps to XAML using Potrace and Inkscape
Edit
Для повышения производительности вы можете Freeze()
вы щетки с помощью PresentationOptions
как это:
<Window x:Class="MyNamespace.MainWindow"
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" ...>
<VisualBrush x:Key="MyVisualBrush" PresentationOptions:Freeze="True" ... />
Цитата из MSDN
:
Когда вам больше не нужно изменять замораживаемый объект, замораживание дает преимущества в производительности. Если бы вы остановили кисть в этом примере, графической системе больше не нужно было бы отслеживать изменения. Графическая система также может выполнять другие оптимизации, потому что она знает, что кисть не изменится.
Вот другой подход, для другого стиля штриховки:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
Background="Black">
<Page.Resources>
<VisualBrush x:Key="HatchBrush" TileMode="Tile"
Viewport="0,0,5,5" ViewportUnits="Absolute"
Viewbox="0,0,5,5" ViewboxUnits="Absolute"
po:Freeze="True">
<VisualBrush.Visual>
<Path Data="M 0 5 L 5 0 M -2 2 L 2 -2 M 3 7 L 7 3"
Stroke="#80ffffff" StrokeEndLineCap="Square"
RenderOptions.EdgeMode="Aliased" />
</VisualBrush.Visual>
</VisualBrush>
</Page.Resources>
<Grid Background="{StaticResource HatchBrush}" />
</Page>