2012-01-13 15 views
5

Sono venuto da sviluppo web e WinForms a WPF e forse non ho ancora ottenuto il concetto. Sono in grado di definire gli stili generali per la mia applicazione nell'app.xaml. Ad esempio ho definito lo stile per tutti i miei controlli a nastro in questo file.Combinare gli stili WPF generici con ResourceDictionary

Quindi ho provato Microsoft Blend e ho trovato ResourceDictionary, che è un po 'di Resource File .resx che conoscevo da WinForms.

Ma come vedo non è possibile combinare questi due concetti. Ad esempio il seguente codice xaml non funzionerà perché ResourceDictionary deve essere l'unico figlio.

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

Sembra che non abbia davvero capito il concetto. Forse puoi aiutarmi, perché questo non è possibile e come posso usare gli stili generali accanto a ResourceDictionary.

risposta

16

Hai già definito le risorse "accanto a" il dizionario, un'immagine e un pennello.

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

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

lo so, ma come l'ho presa da descrizioni MSDN, stili in un ResourceDictionary deve avere una chiave. Ma voglio definire gli stili generali senza una chiave in modo che siano abilitati come predefiniti. –

+0

@ René: Quindi il problema è che si ottiene un errore se si aggiunge uno stile con lo stesso TargetType di uno stile nel dizionario unito? –

+0

No. Non sapevo che il Resource Dictionary prendesse gli stili con solo un TargetType senza una chiave. Fino ad ora... –

3

Basta includere il {x: type} stile nel dizionario risorse

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