2009-05-24 48 views
2

我有我自己的TextBox2類派生自TextBox。我想添加一個名爲TextBlock的狀態,並且當IsTextBlock屬性/依賴項屬性爲true時,我希望VisualStateManager進入該狀態。如果這是真的,我想將文本框的樣式更改爲只讀,並且看起來就像是一個TextBlock,但能夠選擇要複製的文本。這可能嗎?有沒有更好的辦法?如何將狀態添加到Silverlight中的控件?

回答

2

類似的東西:

[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

相關問題