2009-04-22 6 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 유형 (예 : GridDockPanel)을 사용하십시오.

둘째,이 같은 ResourceDictionary를 가져올 수 있습니다

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

또는 다음과 같이 여러에 ResourceDictionary의를 병합 할 수 있습니다 : 내가 제대로 질문을 이해하면

<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

내 질문이 조금 다릅니다 : 나는 (A AI 변환)를 XAML 파일을했습니다 당신은 가능성이 스트레치 속성 (및 기타 속성)을 비주얼에이 시간 주변에 원숭이가 다시 않습니다 캔버스와 다른 폴리 라인으로 변환 된 벡터 이미지입니다 ... 이것을 배경으로 사용하고 싶습니다. –

+1

이 답변은 원래 질문을 다루지 않습니다. –

1

: 당신은을 만들 수 있습니다 내 보낸 XAML 파일의 루트 시각적 비주얼 브러시를 다른 캔버스의 브러시로 사용할 수 있습니다.

1

나는 이것이 오래된 질문이라는 것을 알고있다. 그러나 이것에 관해 갈 여러 가지 방법이있다. 이것이 Google 검색 사용자를 도울 수 있기를 희망하면서 두 가지 방법을 공유 할 것입니다.

우선, 캔버스 (변환 된 .ai 파일에서 가져온 것) 주위에 단순히보기 상자를 넣을 수 있습니다. 당신은 당신이 원하는대로 행동을 얻기 위해 스트레치 및 정렬 특성을 가진 원숭이에있을 수 있음을 양지 ...하지만 당신이 센터에 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에서 배경으로 사용할 수 있음) 해당 아트웍에서 브러시를 만들 수 있습니다. 몇 가지 방법이 있습니다. 첫 번째는 Expression Design을 사용하여 .ai 파일을 DrawingBrush로 변환 할 수 있다는 것입니다. 즉, Expression Design은 Canvas/Shape 또는 ResourceDictionary/Brush라는 두 가지 주요 방법으로 내보낼 수 있습니다.

다시 내보낼 원래 .ai/.design 파일이 없으면 Canvas에서 VisualBrush를 만들 수 있습니다 (@Ugar Turan이 제시 한대로).

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