如何将drophadoweffect添加到文本框的文本(以编程方式)

时间:2011-08-31 12:45:22

标签: c# wpf textbox

我有一个文本框,在某些时候以编程方式添加到画布中,我希望所有文本都有一个drophadoweffect,但我不希望该效果应用于文本框本身的边框。我该怎么做呢?在文本框中添加一个drophadoweffect会将效果应用到框的边框并使文本“模糊”一点,但这不是我想要的,我在文本框中找不到任何可以单独为文本添加效果的属性。我真的需要重新设置文本框或制作我自己的模板来实现这个吗?

请注意,这是一个文本框,而不是文本块(在这种情况下,我只需要复制/粘贴here

1 个答案:

答案 0 :(得分:5)

更新:找到更好的方法,如果您将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的部分。这是与上面的Xaml相当的c#

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

好问题,一个想法是让TextBox的背景和BorderBrush透明并将其放在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