2009-09-20 4 views
2

Nous envisageons de démarrer un nouveau projet Silverlight en utilisant le framework PRISM (pour bénéficier de modules, etc.) et je ne suis toujours pas certain de la meilleure approche de style. Ce que j'aimerais idéalement, c'est d'avoir des fichiers XAML modifiables (peut-être même un pour tout le projet) contenant le style de l'application afin qu'ils puissent être modifiés pour changer l'apparence de l'application sans avoir à tout recompiler. Est-ce que cette approche est quelque chose que les gens utilisent? Je suppose qu'il faudrait charger le fichier au démarrage et appliquer le style que je suppose ne serait pas une surcharge massive.Silverlight PRISM et fichiers de style «loose»

Je me demandais ce que les gens utilisent des approches

Merci pour votre temps

+0

Silverlight 3 prend directement en charge les applications du navigateur –

Répondre

2

Dans Silverlight (et WPF) l'approche typique/normale est de garder vos styles et pinceaux dans un dictionnaire de ressources. ceux-ci peuvent ensuite être échangés pour modifier la disposition, les couleurs et les modèles de contrôle à tout moment. Vous pouvez les inclure dans le fichier XAP généré lorsque vous créez l'application ou dans un assembly autonome. La chose à retenir est que les fichiers de ressources peuvent être chargés à différents niveaux. Le niveau d'application jusqu'au niveau des contrôles individuels. les dictionnaires chargés au niveau inférieur auront préséance sur le premier niveau. Pour moi, ça aide à y penser comme des couches.

2

Voici mon approche-

Dans votre App.xaml vous voulez déclarer un élément MergedDictionaries comme celui-ci ..

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Styles\Colors.xaml" /> 
      <ResourceDictionary Source="Styles\Brushes.xaml" /> 
      <ResourceDictionary Source="Styles\Typeography.xaml" /> 
      <ResourceDictionary Source="Styles\ModuleAStyles.xaml /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Comme vous pouvez le voir, je tendance à avoir quelques fichiers séparés ici pour les couleurs (couleurs si vous l'épelez correctement), pinceaux, typographie et puis généralement utiliser un supplémentaire pour chaque module. Si vous en utilisez plus d'un s'il s'agit d'une application volumineuse, vous risquez d'avoir trop de choses dans un fichier et cela devient rapidement difficile à maintenir. Vous devrez juste utiliser votre meilleur jugement ici et voir ce qui vous convient le mieux.

Dans le Typeography.xaml que je fais référence dans ce dictionnaire fusionné j'ai déclaré un style appelé ApplicationTitle comme ça ...

<!--Application Title--> 
<Style TargetType="{x:Type TextBlock}" 
     x:Key="ApplicationTitle"> 
    <Setter Property="VerticalAlignment" 
      Value="Center" /> 
    <Setter Property="HorizontalAlignment" 
      Value="Center" /> 
    <Setter Property="FontFamily" 
      Value="Georgia" /> 
    <Setter Property="Foreground" 
      Value="{StaticResource ResourceKey=FlatGradientLightest}" /> 
    <Setter Property="FontSize" 
      Value="24" /> 
    <Setter Property="Effect"> 
     <Setter.Value> 
      <DropShadowEffect BlurRadius="5" 
           Color="#333" 
           Opacity=".3" /> 
     </Setter.Value> 
    </Setter> 
</Style> 

Vous remarquerez que dans ce style, je fais référence à nouveau une autre ressource appelée 'FlatGradientLightest' utilisant l'extension de balisage StaticResource. Cette ressource existe dans le fichier Brushes.xaml ...

<!--Flat Diagonal Gradient Lightest--> 
<LinearGradientBrush x:Key="FlatDiagonalGradientLightest" 
        StartPoint="0,0" 
        EndPoint="1,1"> 
    <GradientStop Color="{StaticResource ResourceKey=Light}" 
        Offset="0" /> 
    <GradientStop Color="{StaticResource ResourceKey=Lightest}" 
        Offset="1" /> 
</LinearGradientBrush> 

Et encore une fois cette référence aux couleurs « Light » et « léger ». Ceux-ci existent dans le fichier Colors.xaml ...

<Color x:Key="Light" 
     A="255" 
     R="190" 
     G="190" 
     B="190" /> 
<Color x:Key="Lightest" 
     A="255" 
     R="250" 
     G="250" 
     B="250" /> 

Ce qui est important ici est l'ordre que je spécifié les dictionnaires de ressources dans App.xaml. Si je devais déplacer Typeography.xaml en haut de la liste, cela provoquerait une exécution car au moment où il chargeait ce style, ses dépendances n'existeraient pas. Comme WPF/SL regarde vers le haut pour résoudre les ressources (comme Muad'Dib) l'a signalé, vous pouvez simplement utiliser ces ressources dans vos modules comme si elles étaient déclarées localement. Donc dans un de mes modules, j'ai un TextBlock déclaré comme ça ...

<TextBlock Text="Menu Module Loaded" Style="{StaticResource ResourceKey=ApplicationTitle}" /> 

Ce TextBlock utilise maintenant le style « ApplicationTitle » dans Typeography.xaml, qui charge son Foreground brosse de la « FlatGradientLightest » LinearGradientBrush dans Brushes.xaml, qui se charge à son tour deux couleurs de Color ressources dans les couleurs. fichier xaml.

Un peu cool non?

Espérons que ça aide.

Questions connexes