我有一个WPF文本框,当我直接在窗口或用户控件中重写其模板时,它正常工作,但当我在资源字典中为它使用样式时,所有属性都工作正常,但当我在样式中设置模板时,文本变得不可见。
这里是风格
<Style x:Key="InputTextBoxes" TargetType="TextBox">
<Setter Property="IsEnabled" Value="True"/>
<Setter Property="Foreground" Value="{StaticResource foregroundcolor1}"/>
<Setter Property="Background" Value="{StaticResource foregroundcolor3}"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<!-- Here Comes the Issue-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border Name="Border" CornerRadius="9"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding Foreground}">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
下面是文本框中样式的实现
<TextBox Grid.Row="0"
Grid.Column="1"
Name="RevokeUserNameBox"
Margin="6"
Style="{StaticResource InputTextBoxes}"
Text="{Binding RevokeAdminModel.UserName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
我试着添加ContentPresenter
并删除它,但仍然没有成功。我甚至有一些时间与ChatGPT聊天,没有运气。
1条答案
按热度按时间xlpyo6sf1#
经过一些搜索,我发现这个答案在另一个问题https://stackoverflow.com/a/63362942/13176802
诀窍是我必须
在边框内部,因为这是负责显示文本的部分,正如我从https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/textbox-styles-and-templates?view=netframeworkdesktop-4.8中所理解的
最终风格应该是这样的
我希望这能在未来帮助到一些人。