2011-11-15 1 views
0

En apprentissage sur ce genre de choses WPF, thèmes, etc. dérivations,L'utilisation d'une bibliothèque de classes (et par thème) comme base à une autre bibliothèque de classes

Je comprends les notions de base sur « Thèmes \ generic.xaml », puis la mise en Le fichier app.xaml de votre application pour inclure le dictionnaire de ressources pointant vers le thème en question.

Donc, c'est très bien du point de vue d'un projet d'application. Maintenant, que diriez-vous d'un fichier de bibliothèque de classes/dll. J'ai un projet DLL que je veux utiliser comme base de tous les contrôles dans mon projet. En cela, j'ai le Themes/Generic.xaml et l'ai codé avec quelques bases pour confirmer l'implémentation du design visuel (ok confirmé à l'origine, quand testé dans un projet App/exe).

Maintenant, je veux ce thème à un niveau AVANT l'application réelle. Encore une fois, c'est la référence. Maintenant, j'ajoute une deuxième bibliothèque de contrôles groupés personnalisés (par exemple, un contrôle utilisateur pour les informations d'adresse ... plusieurs lignes d'adresse, ville, état, zip, étiquettes, etc.). Je veux que cette deuxième bibliothèque fasse référence à la première bibliothèque avec les thèmes, donc je peux voir visuellement au moment de la conception à quoi cela ressemblera (alignements, couleurs, polices, etc.). Quoi/où dois-je chercher pour permettre à une DLL de connaître les dictionnaires de fusion qui sont à la base de la première DLL. J'espère que cela a du sens.

- EDIT - pour la clarification

First Class Library ... "MyThemeLibrary" compile dans un .dll Dans ce dll est chemin/fichier "/Themes/MyTheme.xaml"

Comme suggéré par la première réponse, si j'ai un dictionnaire de ressources dans la première bibliothèque, je peux le référencer dans tout ce que je vais en tirer. Alors, je

<ResourceDictionary x:Name="MyGenericTheme" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/Themes/MyTheme.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Deuxième Bibliothèque de classes ... « SecondLevel » compile dans un .dll En cela, j'ai un contrôle utilisateur que je veux mettre une grille pour les colonnes/lignes, des étiquettes et des contrôles de zone de texte dans. Je veux que les contrôles respectent les couleurs, les polices, les tailles, les alignements tels que définis dans le "MyTheme.xaml" de la première DLL.

<UserControl x:Class="SecondLevel.multipleControlContainer" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 

    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
     <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Label Content="Something" 
     Grid.Row="0" Grid.Column="0" /> 

     <TextBox Text="Testing" Grid.Row="1" Grid.Column="1" /> 
    </Grid> 
</UserControl> 

Alors, comment/Que dois-je faire la référence nécessaire, la déclaration, l'inclusion du dictionnaire de ressources de la première bibliothèque dans la seconde.

Répondre

1

faire une référence à votre dll et si vous savez où votre thème est situé vous pouvez faire un

<Application x:Class="My.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
     <!-- Common base theme --> 
     <ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionary/YourTheme.xaml" /> 

     <!-- here comes your custom theme --> 

     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    </Application.Resources> 
</Application> 

faire dans le App.xaml

EDIT après clarification (regarder les commentaires)

<UserControl x:Class="SecondLevel.multipleControlContainer" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
     <!-- Common base theme --> 
     <ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionaryFolder/MyGenericTheme.xaml" /> 
     <!-- Custom theme --> 
     <ResourceDictionary Source="pack://application:,,,/Another.Dll;component/AnotherResDictionaryFolder/MyCustomTheme.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
    </UserControl.Resources> 

    <Grid> 
    <!-- all controls in this usercontrol respect the styles in MyGenericTheme.xaml" 
     if you use implicite styles--> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Label Content="Something" 
      Grid.Row="0" 
      Grid.Column="0" /> 
    <TextBox Text="Testing" 
      Grid.Row="1" 
      Grid.Column="1" /> 

    <!-- if you use explicit styles then you must do this --> 

    <TextBox Style="{StaticResource myTextBoxStyle}" 
      Text="Testing" 
      Grid.Row="1" 
      Grid.Column="1" /> 
    </Grid> 
</UserControl> 
+0

Je suppose que vous ne l'avez pas compris, et j'ai pensé que j'étais clair ... J'ai mon thème dans un DLL, et je veux un deuxième niveau dll pour le référencer lors de la conception ti moi. PAS dans l'application finale (pour l'instant). La deuxième DLL n'a aucune idée de l'application finale. C'est pourquoi j'essaie d'obtenir de la visibilité dans une DLL. Si je me trompe, dites-vous que je peux simplement ajouter un fichier App.xaml à un fichier DLL et qu'il fonctionnera de la même manière qu'une application finale? – DRapp

+0

salut, si dans votre première dll existe un dictionnaire de ressources, vous pouvez référencer cela dans votre deuxième dll dans une ressource Dictionnaire – punker76

+0

Question mise à jour avec plus de détails ... – DRapp

Questions connexes