Как добавить состояние в элемент управления в Silverlight?

2

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

Теги:
silverlight

1 ответ

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

НТН

Ещё вопросы

Сообщество Overcoder
Наверх
Меню