我通过创建自己的自定义控件模板在WPF中设计了自己的文本框。但是,我似乎无法让插入符号出现。
这是我的TextBox样式:
<Style TargetType="{x:Type TextBox}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="True"/>
<Setter Property="TextBlock.Foreground" Value="DeepSkyBlue"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border
Name="border"
CornerRadius="0"
Padding="2"
BorderThickness="1"
BorderBrush="DeepSkyBlue">
<ContentPresenter
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="{TemplateBinding Text}"
Name="content"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Background" Value="MidnightBlue"/>
<Setter Property="BorderBrush" Value="DeepSkyBlue"/>
<Setter Property="Foreground" Value="DeepSkyBlue"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
那么如何才能让我的插图出现?我希望它是MidnightBlue所以它在DeepSkyBlue背景上可见。
答案 0 :(得分:3)
虽然问题作者已经为他们的问题提供了解决方案,但此解决方案可能无法解决其他用户的问题。可能导致TextBox
中的插入符号消失的另一个原因是,您将TextBox.Background
属性设置为{x:Null}
或Transparent
。
这是因为WPF框架将插入符的颜色设置为与Background
属性中的颜色集相反。由于这两个值没有相反的值,因此插入符颜色设置为Black
。这些情况下的解决方案非常简单。
我们可以将Background
属性的颜色设置为我们想要插入符号的相反颜色,但是然后将声明颜色的alpha值设置为00
。例如,如果你想要一个白色插入符号,那么将TextBox.Background
属性设置为#00000000
(透明黑色),如果你想要一个红色插入符号,那么将TextBox.Background
属性设置为{{1 (透明青色)等。
答案 1 :(得分:2)
TextBox
模板需要命名部分PART_ContentHost
,因此您需要替换ContentPresenter
<ControlTemplate TargetType="{x:Type TextBox}">
<Border Name="border" CornerRadius="0" Padding="2" BorderThickness="1" BorderBrush="DeepSkyBlue">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="True">
<Setter Property="Background" Value="MidnightBlue"/>
<Setter Property="BorderBrush" Value="DeepSkyBlue"/>
<Setter Property="Foreground" Value="DeepSkyBlue"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
PART_ContentHost 可包含FrameworkElement的可视元素。 TextBox的文本显示在此元素中。