2011-08-31 115 views
5

我有一个文本框以编程方式添加到画布的某个位置,并且我希望所有文本都具有dropshadoweffect,但我不希望效果应用于文本框本身的边框。我该怎么做呢?在文本框中添加阴影效果可将效果应用于框的边框,并将文本“模糊”一点,但这不是我想要的,并且我无法在文本框中找到任何可以单独为文本添加效果的属性。我真的不得不重新设置文本框,或者制作自己的模板来实现这个目标?如何将dropshadoweffect添加到文本框的文本中(以编程方式)

你要知道,这是一个文本框,而不是一个文本块(在这种情况下,我只想有复制/ here粘贴)

回答

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的一部分。下面是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); 

好问题,一个想法是让背景和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

+0

这是xaml而不是代码,但我会管理,感谢您的出色答案,并且还为添加的屏幕截图 – mtijn

+1

添加了更好的方法,删除了“Border”的使用。在模板 –

+0

+1中的ScrollViewer上设置效果,以便找到限于文本框范围的解决方案,非常棒! – mtijn

相关问题