Создать шаблон штриховки в 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>
Другие вопросы по тегам