2009-04-22 5 views
0

複雑なリソースでアプリケーションをスキニングする方法を理解しようとしています。WPF Application Complex Skin

私はCanvasに複雑なアートワークが含まれているスキンファイルを持っています。このように:

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

このスキンをメインアプリケーションにロードするにはどうすればよいですか?私はこのような何かを考えている:すべての

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

答えて

1

まず、明示的にコントロールをレイアウトするためにCanvasを使用しないでください。その他のPanelタイプ(GridおよびDockPanelなど)を使用します。

第二に、あなたはこのようなResourceDictionaryをインポートすることができます。

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

または、次のように複数でResourceDictionary Sをマージすることができます:私が正しく質問を理解している場合

<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

私の質問は少し異なっている:私は(AIから変換)XAMLファイルをしましたそれはキャンバスと他のポリラインでいっぱいに変換されたベクトルイメージです...私はこれをバックグラウンドとして使いたいと思います。 –

+1

この回答は元の質問には対処していません。 –

1

:あなたが作成することができますエクスポートされたXAMLファイルのルートビジュアルからビジュアルブラシを作成し、それを別のキャンバスのブラシとして使用します。

1

これは古い質問ですが、これについてはいくつかの方法があります。これがGoogleの検索ユーザーに役立つことを願って、私は2つの方法を共有します。

まず、キャンバス(変換された.aiファイルから得たもの)の周りにViewboxを置くだけです。センターにあなたが望むようにそれが動作するように取得するために、ストレッチや配向性をサルに持っていることがあるので注意してください...しかし、最も可能性の高いあなたはUniformToFillのにストレッチを設定しますと、配向性:

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

第二に、もしあなたが何かより共有可能なものを持っているなら(あなたはそれをいくつかのWindows上でバックグラウンドとして使うことができます)、そのアートワークからBrushを作成することができます。これを行うにはいくつかの方法があります。最初は、Expression Designを使用して.aiファイルをDrawingBrushに変換できる(つまり、Expression DesignはCanvas/ShapeまたはResourceDictionary/Brushの2つの主要な方法でエクスポートできます)。

元の.ai/.designファイルを再エクスポートする必要がない場合は、キャンバスからVisualBrushを作成することができます(@Ugar Turanの示唆どおり)。た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>