2010-11-02 4 views
0

Dites que j'ai eu un fichier de thème Button.xaml pour le bouton standard.Comment appliquer implicitement le thème dans le concepteur de composants exactement comme dans le concepteur de projet d'application?

En fusionnant dans le dictionnaire de ressources d'application, il peut implicitement être appliqué dans le concepteur de projet d'application. Mais après avoir déplacé Button.xaml au projet de composant, le concepteur de projet de composant ne peut pas implicitement appliquer le fichier de thème. Comment puis-je faire ce fichier de thème fonctionne implicitement dans le projet de composant?

Mise à jour: le Themes.xaml comme suit

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<ResourceDictionary.MergedDictionaries> 
<ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/Shared.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/Button.xaml" /> 
    <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes/ComboBox.xaml" /> 
... 




<Application x:Class="ButtonStyleTest.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Themes.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Si j'utilise fusionné Theme.xaml, le bouton une apparence normale dans le concepteur, mais a échoué dans l'exécution. Mais si je fusionne Button.xaml, ComboBox un par un, il semble normal pour la conception et l'exécution.

+0

Ceci est usaully dans mon cas pour certains nouveaux modules, ce test dans le projet d'application, puis déplacez-le dans le projet composant une fois rempli. Cela permettra d'économiser du temps de compilation. – user244980

Répondre

0

Nouvel exemple.

Dites que vous avez une bibliothèque appelée StyleLibrary.
Dans cette bibliothèque vous avez un ResourceDictionary appelé Button.xaml qui ressemble à ce

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style TargetType="{x:Type Button}" > 
     <Setter Property="Width" Value="75" /> 
     <Setter Property="Height" Value="23" /> 
    </Style> 
</ResourceDictionary> 

Dans l'application Nous avons ensuite ajouter une référence à StyleLibrary et App.xaml nous ajoutons cela.

<Application x:Class="ButtonStyleTest.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/StyleLibrary;component/Button.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Ce style s'appliquera dans l'application et dans les bibliothèques à la fois en mode d'exécution et en mode concepteur.

À gauche, il y a ma MainWindow. Il a un bouton propre, puis un UserControl de TestLibrary qui a deux boutons. À droite est une fenêtre de TestLibrary qui contient un UserControl de TestLibrary, tous les boutons semblent avoir le style appliqué.

alt text

+0

Merci Meleak. – user244980

+0

Mon problème est que dans le projet d'application, il n'est pas nécessaire d'affecter des ressources dans le balisage UserControl. Cela applique implicitement le thème. Mais si au niveau du composant, est-ce la seule façon d'appliquer le thème en ajoutant en plus le balisage de ressources? – user244980

+0

Mis à jour ma réponse –

Questions connexes