Как добавить состояние в элемент управления в Silverlight? - PullRequest
2 голосов
/ 24 мая 2009

У меня есть свой собственный класс TextBox2, производный от TextBox. Я хочу добавить состояние с именем TextBlock и хочу, чтобы VisualStateManager перешел в это состояние, когда свойство IsTextBlock / свойство зависимости имеет значение true. Когда это так, я хочу изменить стиль текстового поля, чтобы оно было доступно только для чтения и выглядело как TextBlock, но чтобы можно было выбрать текст для копирования. Это возможно? Есть ли лучший способ?

1 Ответ

2 голосов
/ 27 мая 2009

Примерно так:

[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);
        }
    }
}

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...