2014-04-07 2 views
12

WPF에서 스트라이프 패턴을 만들 수 있었지만 XAML에서 이와 같은 패턴을 만들려면 어떻게해야합니까? WPF에서 이와 비슷한 기본 브러시가 있습니까?WPF에서 해치 패턴 만들기

enter image description here

답변

22

당신은 VisualBrush를 사용하여 XAML에 그것을 할 수 있습니다. 당신은 예를 들어, 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, 무료이며 매우 유용합니다. ful. 자세한 내용은이 링크를 참조하십시오 더 나은 성능을 위해

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을 더 이상 수정할 필요가 없으면 멈추고 성능이 향상됩니다. 이 예제에서 브러시를 고정하려면 그래픽 시스템이 더 이상 변경 사항을 모니터링 할 필요가 없습니다. 그래픽 시스템은 브러시가 변경되지 않는다는 것을 알고 있기 때문에 다른 최적화 작업을 수행 할 수도 있습니다.

+0

덕분에,이 얼마나 비싼인가? 나는 100 개의 직사각형처럼 그것을 사용할 것입니다. – Vahid

+0

@Vahid 템플릿으로 만들고 각 인스턴스에 대해 개별적으로 사용하지 않고 다시 사용하십시오. –

+1

@Vahid : 우선 XAML의 이점으로 많은 시간을 투자해서이 작업을 수행해야한다고 생각합니다. 원칙적으로 WPF는 벡터 그래픽 작업에 최적화되어 있으므로'PresentationOptions : Freeze = "True"'와 같이'PresentationOptions'의 도움으로'VisualBrush'를 고정시킬 수 있습니다. 더 자세한 정보는이 링크를 참조하십시오 (http://www.codeproject.com/Articles/22716/Graphic-in-XAML-and-WPF). –

6

여기에 또 다른 접근 방법은 부화의 다른 스타일 들어, : 아나톨리

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