2017-10-11 9 views
3

J'ai un bouton qui a un modèle de style en mode A. En mode A, ce bouton a un VisualState PointerOver. J'utilise le même bouton quand je suis en mode B, mais en mode B je voudrais avoir un VisualState différent de PointerOver.Est-il possible d'avoir deux modèles de style pour un élément et de décider lequel utiliser dans le code derrière?

Quelle est la meilleure façon d'obtenir quelque chose comme ceci fait en utilisant des états visuels? Je pense avoir deux modèles de style différents pour le même bouton et en quelque sorte changer le modèle de style à utiliser dans le code, mais je ne sais pas si c'est possible ou si c'est la meilleure façon d'aborder cela.

Des suggestions?

+0

Je pense que c'est facile à faire. – lindexi

+0

utiliser le modèle et le style –

Répondre

2

Essayez ceci dans votre code derrière:

[control name].Style = this.FindResource("[style key]") as Style; 

Aussi vous ne devriez pas appeler styles "modèles de style", comme il peut me mal compris. Les styles et les modèles sont deux choses différentes.

  • Les modèles définissent comment un contrôle donné est construit. Par exemple si un Button est construit avec l'utilisation d'un Border et d'un TextBlock (ou avec d'autres commandes).
  • Les styles définissent un ensemble de propriétés décrivant l'aspect d'un contrôle donné (le modèle est l'une de ces propriétés).
0

Une autre option est d'utiliser un Converter pour décider quel Style le Button devrait être.

Converter:

public class ButtonStyleConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
    var mode = (int)value; 
    return mode == 1 ? Application.Current.Resources["ButtonStyle1"] as Style : Application.Current.Resources["ButtonStyle2"] as Style; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
    //Do nothing 
    } 
} 

Utilisation:

<Button Content="Hello" Style="{Binding Button1Mode, Converter={StaticResource ButtonStyleConverter}}"/> 
<Button Content="World" Style="{Binding Button2Mode, Converter={StaticResource ButtonStyleConverter}}" /> 

J'ai utilisé un Binding à une propriété sur mon ViewModel, qui en théorie devrait vous permettre de modifier le "Mode" le bouton est à l'exécution en fonction des données. Si vous avez besoin de plus de code, je serais heureux de poster un exemple sur Github.