WPF自定义TextBox样式后输入文本不显示问题求助
WPF自定义TextBox样式文本不显示问题解决方案
你的问题核心是自定义ControlTemplate中缺少承载文本的核心元素:TextBox的默认模板依赖名为PART_ContentHost的ScrollViewer来渲染和编辑文本,你完全替换模板后只保留了Border,导致文本仅在后台存在,界面无法显示。
以下是修正后的完整代码:
<Window.Resources> <Style x:Key="txtBoxStyle" TargetType="{x:Type TextBox}"> <Setter Property="Background" Value="White"/> <Setter Property="TextWrapping" Value="Wrap"/> <Setter Property="BorderThickness" Value="2"/> <Setter Property="BorderBrush" Value="Blue"/> <Setter Property="Padding" Value="6 3"/> <Setter Property="FontFamily" Value="Verdana"/> <!-- 修正拼写错误:原Verdane改为Verdana --> <Setter Property="FontWeight" Value="Bold"/> <Setter Property="FontSize" Value="12"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="Cursor" Value="IBeam"/> <Setter Property="HorizontalContentAlignment" Value="Left"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TextBox"> <Border x:Name="border" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="5" SnapsToDevicePixels="True"> <!-- 关键:添加文本承载元素,必须使用PART_ContentHost命名 --> <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="Blue"/> </Trigger> <!-- 移除重复的IsMouseOver触发器 --> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="BorderBrush" TargetName="border" Value="DarkBlue"/> <!-- 可选:添加焦点状态样式 --> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <StackPanel> <TextBox Name="txt_1" Height="100" Width="100" Style="{DynamicResource txtBoxStyle}" FontWeight="Bold" Panel.ZIndex="5" /> <Button x:Name="btn_Tikla" Width="100" Height="100" Background="Blue" Click="btn_Tikla_Click"/> </StackPanel> </Grid>
关键改动说明:
- 添加了
PART_ContentHost命名的ScrollViewer:这是WPF控件模板的约定,TextBox会自动识别并将文本内容绑定到这个元素,是显示文本的核心。 - 绑定Border的Background、BorderThickness、BorderBrush到模板父级的对应属性:让Style中设置的属性能正确作用到Border上,保持样式一致性。
- 移除了重复的IsMouseOver触发器,避免冗余代码。
- 修正了FontFamily的拼写错误(原
Verdane改为Verdana)。 - 可选添加了IsKeyboardFocused触发器,优化焦点状态下的视觉反馈。
内容的提问来源于stack exchange,提问作者YETİ
相关产品推荐
相关产品推荐

