我有自己的TextBox2类,它是从TextBox派生的。我想添加一个称为TextBlock的状态,并且当IsTextBlock属性/依赖项属性为true时,我希望VisualStateManager进入该状态。当这是真的时,我想将文本框的样式更改为只读,看起来就像一个TextBlock,但是能够选择可复制的文本。这可能吗?有没有更好的办法?
最佳答案
像这样:
[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);
}
}
}
高温超导