2012-01-13 17 views
5

Pochodzę z tworzenia stron internetowych i WinForms do WPF i być może nie dostałem jeszcze koncepcji. Jestem w stanie zdefiniować ogólne style dla mojej aplikacji w pliku app.xaml. Na przykład zdefiniowałem styl dla wszystkich moich kontrolek wstążki w tym pliku.Mieszanie ogólnych stylów WPF z ResourceDictionary

Potem próbowałem Microsoft Blend i natknąłem się na ResourceDictionary, który jest czymś w rodzaju pliku Resource .resx, który znałem z WinForms.

Ale jak widzę, nie jest możliwe połączenie tych dwóch koncepcji. Na przykład następujące kod xaml nie będzie działać, ponieważ ResourceDictionary musi być jedynym dzieckiem.

<Application x:Class="Wpf.MyApplication.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
      StartupUri="MyMainWindow.xaml"> 
    <Application.Resources> 
     <!-- Resources scoped at the Application level should be defined here. --> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles/RibbonStyle.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
      <BitmapImage x:Key="IconDokumentNeu" >Images/NewDocument_32x32.png</BitmapImage> 
     <SolidColorBrush x:Key="LightGrayBrushKey">WhiteSmoke</SolidColorBrush> 
    </ResourceDictionary> 
    <Style TargetType="{x:Type ribbon:RibbonWindow}"> 
     <Setter Property="Icon" Value="../time2_32.png" /> 
     <Setter Property="TextOptions.TextFormattingMode" Value="Display" /> 
    </Style> 
    </Application.Resources> 
</Application> 

Wygląda na to, że tak naprawdę nie rozumiem tej koncepcji. Może możesz mi pomóc, dlaczego nie jest to możliwe i jak mogę używać ogólnych stylów obok ResourceDictionary.

Odpowiedz

16

Masz już zasoby zdefiniowane "obok" słownika, jednego obrazu i jednego pędzla.

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <!-- Dictionaries from file here --> 
     </ResourceDictionary.MergedDictionaries> 

     <!-- Other resources here --> 
    </ResourceDictionary> 
</Application.Resources> 
+0

wiem, ale jak mam to z opisów MSDN, stylów w ResourceDictionary musi mieć klucz. Ale chcę zdefiniować ogólne style bez klucza, więc będą one włączone jako domyślne. –

+0

@ René: Problem polega na tym, że pojawi się błąd, jeśli dodasz styl z tym samym atrybutem TargetType, co styl w scalonym słowniku? –

+0

Nie. Po prostu nie wiedziałem, że Słownik zasobów przyjmuje style tylko za pomocą TargetType bez klucza. Do teraz... –

3

Wystarczy obejmować {x: typ} styl w słowniku zasobów

<ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
        <!-- Dictionaries from file here --> 
      </ResourceDictionary.MergedDictionaries>  
      <Style TargetType="{x:Type ribbon:RibbonWindow}">   
       <Setter Property="Icon" Value="../time2_32.png" />   
       <Setter Property="TextOptions.TextFormattingMode" Value="Display" /> 
      </Style> 
    </ResourceDictionary> 
Powiązane problemy