Как добавить эффект drophadow только к тексту текстового поля (программно) - PullRequest
5 голосов
/ 31 августа 2011

У меня есть текстовое поле, которое программно добавляется на холст в какой-то момент, и я хочу, чтобы весь текст имел эффект drophadow, но я не хочу, чтобы этот эффект применялся к границам самого текстового поля. Как мне это сделать? Добавление эффекта капли к текстовому блоку применяет эффект к границам блока и немного «размывает» текст, но это не то, что мне нужно, и я не могу найти в текстовом поле никаких свойств, которые позволили бы добавить эффект только к тексту. Мне действительно нужно изменить стиль текстового поля или создать собственный шаблон для достижения этой цели?

Имейте в виду, это текстовое поле, а не текстовое поле (в этом случае я бы просто скопировал / вставил из здесь )

1 Ответ

5 голосов
/ 31 августа 2011

Обновление: Нашли лучший способ, вы можете пропустить часть Border, если применить Effect непосредственно к ScrollViewer, который инкапсулирует текст в шаблоне.

<TextBox Text="Shadow Text">
    <TextBox.Resources>
        <Style TargetType="ScrollViewer">
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect ShadowDepth="4"
                                      Direction="330"
                                      Color="Black"
                                      Opacity="0.5"
                                      BlurRadius="4"/>
                </Setter.Value>
            </Setter>
        </Style>
    </TextBox.Resources>
</TextBox>

Обновление 2: Пропущена часть создания TextBox в коде.Вот c # эквивалент Xaml выше

Setter effectSetter = new Setter();
effectSetter.Property = ScrollViewer.EffectProperty;
effectSetter.Value = new DropShadowEffect
{
    ShadowDepth = 4,
    Direction = 330,
    Color = Colors.Black,
    Opacity = 0.5,
    BlurRadius = 4
};
Style dropShadowScrollViewerStyle = new Style(typeof(ScrollViewer));
dropShadowScrollViewerStyle.Setters.Add(effectSetter);

TextBox dropShadowTextBox = new TextBox();
dropShadowTextBox.Text = "Shadow Text";
dropShadowTextBox.Foreground = Brushes.Teal;
dropShadowTextBox.FontSize = 40;
dropShadowTextBox.Margin = new Thickness(10);
dropShadowTextBox.Resources.Add(typeof(ScrollViewer), dropShadowScrollViewerStyle);

Хороший вопрос, одна идея состоит в том, чтобы сделать Background и BorderBrush прозрачным для TextBox и поместить его в Border

<Border BorderThickness="1"
        BorderBrush="#FF7F9DB9"
        SnapsToDevicePixels="True"
        UseLayoutRounding="True"
        Margin="10">
    <TextBox Text="Shadow Text"
             Foreground="Teal"
             FontSize="40"
             Background="Transparent"
             BorderBrush="Transparent">
        <TextBox.Effect>
            <DropShadowEffect ShadowDepth="4"
                        Direction="330"
                        Color="Black"
                        Opacity="0.5"
                        BlurRadius="4"/>
        </TextBox.Effect>
    </TextBox>
</Border>

Вот сравнение с "нормальным" TextBox

enter image description here

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