Как создать светящийся TextBox в WPF 4.0?

Я пытаюсь создать текстовое поле, которое будет светиться при фокусировке.

Все примеры того, как это сделать, которые я видел до сих пор, были основаны на OuterGlowBitmapEffect, и похоже, что он не работает в.net 4.

Рекомендация во второй статье - использовать эффект размытия. Я понятия не имею, как использовать размытие, чтобы заставить внешний слой объекта светиться без искажения внутреннего содержимого объекта.

В конечном счете, я надеюсь создать текстовое поле, которое будет отображать анимацию свечения при фокусировке, и свечение будет медленно (1-2 секунды) исчезать после того, как элемент управления потеряет фокус.

Любые идеи о том, как лучше всего сделать это в wpf 4.0?

2 ответа

Решение

Вы можете попытаться получить приличный "эффект свечения" с DropShadowEffect, Вот пример

ОбновлениеTextBox который начинает "светиться", когда фокусируется, и "свет" медленно гаснет на две секунды, когда теряет фокус.

<TextBox Text="Test">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect ShadowDepth="0"
                                      Color="Gold"
                                      Opacity="0"
                                      BlurRadius="8"/>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Trigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation To="1.0"
                                                 Storyboard.TargetProperty="(Effect).Opacity"
                                                 Duration="00:00:00"/>
                            </Storyboard>                                    
                        </BeginStoryboard>
                    </Trigger.EnterActions>
                    <Trigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation To="0.0"
                                                 Storyboard.TargetProperty="(Effect).Opacity"
                                                 Duration="00:00:02"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </Trigger.ExitActions>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

Посмотрите на http://wpfthemes.codeplex.com/ много хороших идей для wpf-тем. В частности, посмотрите на тему для текстового поля в Бюро Black. Я думаю, что вы на самом деле хотите использовать то, что они используют для своего атрибута mouseover, но вместо этого должно быть легко изменить его на свойство focus.

Другие вопросы по тегам