2014-04-07 6 views

risposta

22

Si può fare in XAML utilizzando VisualBrush. Hai solo bisogno di specificare i valori dati per la Path, ad esempio:

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

Per la conversione Image to Vector grafica (Path) utilizzare Inkscape, che è gratuito e molto utile Ful. Per ulteriori informazioni vedere questo link:

Vectorize Bitmaps to XAML using Potrace and Inkscape

Edit

Per ottenere migliori prestazioni, si può Freeze() si Spazzole con l'aiuto di PresentationOptions come questo:

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

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

Citazione di MSDN:

Quando non è più necessario modificare un congelabile, il congelamento offre vantaggi in termini di prestazioni. Se in questo esempio si dovesse congelare il pennello, il sistema grafico non avrebbe più bisogno di monitorarlo per le modifiche. Il sistema grafico può anche fare altre ottimizzazioni, perché sa che il pennello non cambierà.

+0

Grazie Anatoliy, quanto costoso è questo? Lo userò su 100 rettangoli simili. – Vahid

+0

@Vahid Crea un modello e riutilizzalo in questo modo anziché singolarmente per ogni istanza. –

+1

@Vahid: Penso che dovresti prima di tutto provare a fare questo a vantaggio di XAML, non avere molto tempo. In linea di principio, WPF è ottimizzato per lavorare con la grafica vettoriale, quindi puoi congelare il tuo 'VisualBrush' con l'aiuto di' PresentationOptions', come questo: 'PresentationOptions: Freeze =" True "'. Per maggiori informazioni vedi questo ['link'] (http://www.codeproject.com/Articles/22716/Graphic-in-XAML-and-WPF). –

6

Ecco un altro approccio, per un diverso stile di tratteggio:

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