2009-04-22 12 views
0

Ich versuche herauszufinden, wie eine Anwendung mit einer komplexen Ressource skin.WPF Application Complex Skin

Ich habe eine Skin-Datei, in der ich Canvas, die die komplizierte Grafik enthält. Gefällt mir:

<ResourceDictionary> 
    <Style x:Key="MainBackground" TargetType="{x:Type Canvas}"> 
     <Setter Property="Canvas"> 
      <Setter.Value> 
       <Canvas Width="1440.000" Height="900.000"> 
       <!-- complicated artwork here --> 
       </Canvas> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

Wie kann ich diese Haut in die Hauptanwendung laden? Ich denke, so etwas wie dieses:

<Window> 
    <Canvas Style="{StaticResource MainBackground}"/> 
</Window > 

Antwort

1

Zunächst einmal keine Canvas verwenden Kontrollen explizit anzulegen. Verwenden Sie die anderen Panel Typen (z. B. Grid und DockPanel).

Zweitens können Sie eine ResourceDictionary wie folgt importieren:

<Window> 
    <Window.Resources> 
     <ResourceDictionary Source="YourDictionary.xaml"/> 
    </Window.Resources> 
</Window> 

Oder Sie können in mehreren ResourceDictionary s verschmelzen wie folgt:

<Window> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="YourDictionary.xaml"/> 
       <ResourceDictionary Source="YourOtherDictionary.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 

     <SolidColorBrush x:Key="SomeLocalResource">Red</SolidColorBrush> 
    </Window.Resources> 
</Window> 
+2

Meine Frage ist ein wenig anders: Ich habe eine XAML-Datei (von AI umgewandelt) das ist ein Vektorbild, das voll von Leinwand und anderer Polylinie ... umgewandelt wird Ich möchte das als Hintergrund verwenden. –

+1

Diese Antwort bezieht sich nicht auf die ursprüngliche Frage. –

1

Wenn ich die Frage richtig verstanden: Sie ein erstellen visueller Pinsel aus dem Wurzel-Visual der exportierten XAML-Datei und verwenden Sie ihn als Pinsel einer anderen Zeichenfläche.

1

Ich weiß, das ist eine alte Frage ... aber es gibt mehrere Wege, dies zu tun. In der Hoffnung, dass dies einem Google-Sucher helfen wird, werde ich zwei Wege teilen.

Als Erstes könnten Sie einfach eine Viewbox um diese Canvas (die Sie aus einer konvertierten .ai-Datei erhalten haben) setzen. Beachten Sie, dass Sie mit den Stretch und Ausrichtungseigenschaften, um Affe kann es zu bekommen zu verhalten, wie Sie wollen ... aber die meisten wahrscheinlich, dass Sie durch Dehnung UniformToFill und die Ausrichtungseigenschaften Zentrum gesetzt würde:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="BackgroundSkin.MainWindow" 
    x:Name="Window" 
    Width="640" 
    Height="480" 
> 
    <Grid x:Name="LayoutRoot"> 
     <Viewbox 
      Stretch="UniformToFill" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
     > 
      <!-- Replace the following Canvas with yours. --> 
      <Canvas Background="White"/> 
     </Viewbox> 
    </Grid> 
</Window> 

Zweitens, wenn Sie lieber etwas mehr shareable (so dass Sie es als Hintergrund für mehrere Windows verwenden könnten), könnten Sie einen Pinsel aus diesem Kunstwerk erstellen. Es gibt mehrere Möglichkeiten, dies zu tun. Die erste besteht darin, zu erkennen, dass Sie mit Expression Design die .ai-Datei in einen DrawingBrush konvertieren können (d. H. Expression Design kann auf zwei Arten exportiert werden: Canvas/Shape (s) oder ResourceDictionary/Brush (es).

Wenn Sie die ursprüngliche .ai/.design-Datei zum erneuten Exportieren nicht haben, können Sie VisualBrush aus dem Canvas-Bereich erstellen (wie es @Ugar Turan vorschlägt). Beachten Sie, dass Sie werden wahrscheinlich wieder zu Affen haben um mit der Stretch-Eigenschaft (und anderen Objekten) diesmal auf der VisualBrush:

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="BackgroundSkin.MainWindow" 
    x:Name="Window" 
    Width="640" 
    Height="480" 
    Background="{DynamicResource backgroundBrush}"  
> 
    <Window.Resources> 
     <!-- Replace the following Canvas with yours. --> 
     <Canvas x:Key="backgroundCanvas"/> 
     <VisualBrush 
      x:Key="backgroundBrush" 
      Visual="{DynamicResource backgroundCanvas}" 
      Stretch="UniformToFill" 
     /> 
    </Window.Resources> 
</Window>