Sono stato in grado di creare motivi di strisce in WPF, ma come posso creare un modello come questo in XAML? C'è un pennello simile di default per questo in WPF?Creare un modello di tratteggio in WPF
risposta
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
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à.
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>
Grazie Anatoliy, quanto costoso è questo? Lo userò su 100 rettangoli simili. – Vahid
@Vahid Crea un modello e riutilizzalo in questo modo anziché singolarmente per ogni istanza. –
@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). –