WPF

2014-04-07 25 views
12

'da bir kapak modeli oluşturma WPF'de şerit desenleri oluşturabiliyordum, ancak XAML'de nasıl bir desen oluşturabilirim? WPF'de bunun için varsayılan bir benzer fırça var mı?WPF

enter image description here

cevap

22

Sen VisualBrush kullanarak XAML yapabilirsiniz. Yalnızca örneğin Path için veri değerlerini belirlemek gerekir:

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

Vektör grafik (Path) için Image dönüştürme için kullanmak Inkscape, ücretsiz ve çok kullanışlıdır ful. Daha fazla bilgi için bu bağlantıya bakınız: Daha iyi performans için

Vectorize Bitmaps to XAML using Potrace and Inkscape

Edit

şunları yapabilirsiniz Freeze() böyle PresentationOptions yardımıyla fırçalar:

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

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

MSDN alıntı:

Artık bir dondurucuyu değiştirmeye ihtiyacınız olmadığında, donma performans açısından avantaj sağlar. Bu örnekte fırçayı donduracak olursanız, grafik sisteminin artık değişiklikler için izlemesine gerek kalmayacaktı. Grafik sistemi diğer optimizasyonları da yapabilir, çünkü fırçanın değişmeyeceğini biliyor.

+0

sayesinde bu kadar pahalı mı? 100 dikdörtgen gibi kullanacağım. – Vahid

+0

@Vahid Bir şablon yapın ve her örnek için ayrı ayrı yerine bu şekilde yeniden kullanın. –

+1

@Vahid: Bence her şeyden önce bunu XAML'ın yararına yapmaya çalışmamalısınız. Prensip olarak, WPF vektör grafikleri ile çalışacak şekilde optimize edilmiştir, böylece 'VisualBrush'ınızı' PresentationOptions 'yardımı ile dondurabilirsiniz, örneğin: PresentationOptions: Freeze = "True" '. Daha fazla bilgi için bkz. Bu ['link'] (http://www.codeproject.com/Articles/22716/Graphic-in-XAML-and-WPF). –

6

Burada başka yaklaşım kuluçka farklı bir stil için, var: Anatoliy

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