2009-05-24 7 views
2

J'ai ma propre classe TextBox2 dérivée de TextBox. Je veux ajouter un état appelé TextBlock et je veux que VisualStateManager passe à cet état lorsque la propriété propriété/dépendance IsTextBlock est true. Lorsque cela est vrai, je veux changer le style de la zone de texte pour être en lecture seule et ressembler à un TextBlock mais être capable de sélectionner le texte à copier. Est-ce possible? Y a-t-il un meilleur moyen?Comment puis-je ajouter un état à un contrôle dans Silverlight?

Répondre

2

Quelque chose comme ça:

[TemplateVisualState(Name = "TextBlock", GroupName = "ControlType")] 
[TemplateVisualState(Name = "TextBox", GroupName = "ControlType")] 
public class TextBox2 : TextBox 
{ 
    public TextBox2() 
    { 
     DefaultStyleKey = typeof (TextBox2); 
     Loaded += (s, e) => UpdateVisualState(false); 
    } 


    private bool isTextBlock; 
    public bool IsTextBlock 
    { 
     get { return isTextBlock; } 
     set 
     { 
      isTextBlock = value; 
      UpdateVisualState(true); 
     } 
    } 

    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     UpdateVisualState(false); 
    } 


    internal void UpdateVisualState(bool useTransitions) 
    { 
     if (IsTextBlock) 
     { 
      VisualStateManager.GoToState(this, "TextBlock" , useTransitions); 
     } 
     else 
     { 
      VisualStateManager.GoToState(this, "TextBox" , useTransitions); 
     } 
    } 
} 

HTH

Questions connexes