将 DropShadowEffect 应用于 WPF 文本框文本
Apply DropShadowEffect to WPF Textbox text
如何将 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 文本)
编辑:主要信息是着色器应用于控件的每个渲染像素。如果您只想将它应用于它的一部分,请在该模板的该级别上应用它,或者不要呈现其他所有内容。
通过自定义你的TextBox
的ControlTemplate
,你可以达到想要的效果:
<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>
相反,您可能希望从文本框中删除边框、背景和焦点矩形,这样您仍然具有文本框功能:
<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>
如何将 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 文本)
编辑:主要信息是着色器应用于控件的每个渲染像素。如果您只想将它应用于它的一部分,请在该模板的该级别上应用它,或者不要呈现其他所有内容。
通过自定义你的TextBox
的ControlTemplate
,你可以达到想要的效果:
<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>
相反,您可能希望从文本框中删除边框、背景和焦点矩形,这样您仍然具有文本框功能:
<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>