如何将DropShadowEffect应用于TextBox的内容,而不是围绕TextBox本身?我希望文本具有与将DropShadowEffect应用于TextBlock相同的效果。
<TextBox>
<TextBox.Effect>
<DropShadowEffect ShadowDepth="4"
Direction="330"
Color="Black"
Opacity="0.5"
BlurRadius="4"/>
</TextBox.Effect>
</TextBox>
^这会在整个盒子周围产生阴影。
<TextBlock>
<TextBlock.Effect>
<DropShadowEffect ShadowDepth="4"
Direction="330"
Color="Black"
Opacity="0.5"
BlurRadius="4"/>
</TextBlock.Effect>
</TextBlock>
^这是所需的外观。 (但对于TextBox文本)
编辑:带回家的消息是,将着色器应用于控件的每个渲染像素。如果您只想将其应用于部分模板,请在该模板上的该级别上应用它,或者不渲染其他所有内容。
答案 0 :(得分:1)
通过自定义ControlTemplate
中的TextBox
,您可以达到所需的效果:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid x:Name="RootElement">
<!-- Use your effects on the ContentPresenter here. -->
<ContentPresenter Content="{TemplateBinding Padding}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 1 :(得分:1)
相反,您可能想从文本框中删除“边框”,“背景”和“焦点”矩形,以便仍然具有“文本框”功能:
<TextBox Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
TextWrapping="Wrap">
<TextBox.Effect>
<DropShadowEffect ShadowDepth="4"
Direction="330"
Color="Black"
Opacity="0.5"
BlurRadius="4"
/>
</TextBox.Effect>
<TextBox.FocusVisualStyle>
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate/>
</Setter.Value>
</Setter>
</Style>
</TextBox.FocusVisualStyle>
</TextBox>