2014-04-07 13 views

Antwort

22

Sie können es in XAML tun VisualBrush verwenden. Sie brauchen nur Datenwerte für die Path, zum Beispiel angeben:

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

Für Image zu Vektorgrafiken (Path) Umwandlung verwenden Inkscape, die frei und sehr nützlich ist ful. Weitere Informationen finden Sie unter diesem Link:

Vectorize Bitmaps to XAML using Potrace and Inkscape

Edit

Für eine bessere Leistung, können Sie Freeze() Sie Bürsten mit Hilfe von PresentationOptions wie folgt aus:

<Window x:Class="MyNamespace.MainWindow" 
     xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" ...> 

    <VisualBrush x:Key="MyVisualBrush" PresentationOptions:Freeze="True" ... /> 

Zitat von MSDN:

Wenn Sie ein Freezable nicht mehr ändern müssen, bietet das Einfrieren Performance-Vorteile. Wenn Sie in diesem Beispiel den Pinsel einfrieren würden, müsste das Grafiksystem ihn nicht mehr auf Änderungen überwachen. Das Grafiksystem kann auch andere Optimierungen vornehmen, weil es weiß, dass sich der Pinsel nicht ändert.

+0

Dank Anatoliy, wie teuer ist das? Ich werde es auf wie 100 Rechtecke verwenden. – Vahid

+0

10 @Vahid Machen Sie es zu einer Vorlage und verwenden Sie es für jede Instanz einzeln und nicht einzeln. –

+1

@Vahid: Ich denke du solltest zuallererst versuchen dies zu tun, im Vorteil von XAML nicht viel Zeit zu haben. Im Prinzip ist WPF für die Arbeit mit Vektorgrafiken optimiert, so dass Sie Ihren 'VisualBrush' mit Hilfe von' PresentationOptions' wie folgt einfrieren können: 'PresentationOptions: Freeze =" True "'. Für weitere Informationen siehe ['link'] (http://www.codeproject.com/Articles/22716/Graphic-in-XAML-and-WPF). –

6

Hier ist ein weiterer Ansatz für eine andere Art der Schraffur:

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