2010-11-01 4 views
4

Je construis une application WPF, et j'ai dérivé un tas de contrôles des types de contrôle WPF standard - blocs de texte, boutons, etc. J'ai essayé d'ajouter un dictionnaire de ressources à app.xaml pour définir le thème, mais mes commandes personnalisées ne semble pas le respecter. (Par exemple, les boutons standard prennent bien le thème Aero, mais un myButton dérivé d'un bouton est toujours sans apparence.) Y a-t-il un moyen de définir le thème de mes contrôles dérivés comme les contrôles de base?Classes dérivées et héritage de thème dans WPF?

EDIT: Je dois noter que ces contrôles personnalisés sont instanciés à l'exécution, donc je ne peux pas manipuler leurs propriétés directement via XAML. Je peux modifier des propriétés particulières comme la couleur d'arrière-plan en utilisant un Setter dans le dictionnaire de ressources d'application, mais je n'ai pas trouvé le moyen de définir un thème en utilisant cette technique.

Répondre

1

Si vous avez ce style dans un dictionnaire appelé ressources Dictionary1.xaml

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

Ensuite, vous pouvez le mettre sur un bouton avec ce code derrière

Uri resourceLocater = new Uri("/YourAssemblyName;component/Dictionary1.xaml", System.UriKind.Relative); 
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater); 
Style myButtonStyle = resourceDictionary["MyButtonStyle"] as Style; 

Button button = new Button(); 
button.Style = myButtonStyle; 
Questions connexes