将 DropShadowEffect 应用于 WPF 文本框文本



如何在文本框的内容上应用DropShadowEffect,而不是在文本框本身周围?我希望文本具有与将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 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>

通过自定义TextBoxControlTemplate,您可以获得所需的效果:

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

最新更新