Создание шаблона штриховки в WPF

Я смог создать шаблоны полос в WPF, но как я могу создать такой шаблон в XAML? Есть ли аналогичная кисть по умолчанию для этого в WPF?

enter image description here

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

enter image description here

для преобразования 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:

когда вам больше не нужно изменять freezable, замораживание обеспечивает преимущества производительности. Если бы вы заморозили кисть в этом примере, графическая система больше не будет нужно следить за его изменениями. Графическая система также может выполнять другие оптимизации, поскольку знает, что кисть не изменится.


вот еще один подход, для другого стиля штриховки:

<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>