2011-08-31 14 views
5

プログラムによってキャンバスに追加されたテキストボックスをある時点で持っていて、すべてのテキストにdropshadoweffectが必要ですが、テキストボックス自体の境界線に適用されます。これはどうすればいいですか?テキストボックスにドロップシャドウエフェクトを追加すると、ボックスの境界線にエフェクトが適用され、テキストが少しぼやけてしまいますが、これは私が望むものではなく、テキストボックスにはテキストだけにエフェクトを追加できるプロパティはありません。私は実際にテキストボックスのスタイルを変更するか、これを達成するために独自のテンプレートを作成する必要がありますか?テキストボックスのテキストだけにdropshadoweffectを追加する方法(プログラム的に)

マインドますこれは(hereから貼り付け、私はちょうどコピーを持つことになり、その場合には/)テキストボックスではなく、テキストブロック

答えて

5

アップデートです:あなたが適用された場合は、より良い方法を見つけ、あなたがBorder部分をスキップすることができますテンプレート内のテキストをカプセル化する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作成の一部を逃しました。ここでは良い質問

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

上記のXAMLのC#と同等である、1つのアイデアは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

+0

これはコードではなくxamlですが、優れた答えと追加されたスクリーンショットのおかげで、私は管理します – mtijn

+1

「Border」の使用を削除してより良いアプローチを追加しました。テンプレートのScrollViewerに効果を設定する –

+0

+1、テキストボックスのスコープに制限された解決策を見つけるのは素晴らしい! – mtijn

関連する問題