2012-01-13 2 views
5

Je suis venu du développement web et de WinForms à WPF et peut-être que je n'ai pas encore eu le concept. Je suis capable de définir des styles généraux pour mon application dans le fichier app.xaml. Par exemple j'ai défini le style pour tous mes contrôles de ruban dans ce fichier.Mélange de styles WPF généraux avec ResourceDictionary

Ensuite, j'ai essayé Microsoft Blend et est tombé sur ResourceDictionary, qui est une sorte de Resource File .resx que je connaissais de WinForms.

Mais comme je vois, il n'est pas possible de mélanger ces deux concepts. Par exemple, le code xaml suivant ne fonctionnera pas car ResourceDictionary doit être le seul enfant.

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

Il semble que je n'ai pas vraiment compris le concept. Peut-être que vous pouvez m'aider, pourquoi cela n'est pas possible et comment je peux utiliser les styles généraux à côté de ResourceDictionary.

Répondre

16

Vous avez déjà des ressources définies "à côté" du dictionnaire, une image et un pinceau.

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

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

Je sais, mais comment je l'ai obtenu des descriptions MSDN, les styles dans un ResourceDictionary doit avoir une clé. Mais je veux définir des styles généraux sans clé afin qu'ils soient activés par défaut. –

+0

@ René: Le problème est donc que vous obtenez une erreur si vous ajoutez un style avec le même TargetType comme style dans le dictionnaire fusionné? –

+0

Non. Je ne savais tout simplement pas que le dictionnaire de ressources utilise des styles avec juste un TargetType sans clé. Jusqu'à maintenant... –

3

Il suffit d'inclure le {x: type} style dans le dictionnaire de ressources

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