繁体   English   中英

如何在自定义WPF文本框中显示插入符号

[英]How to display caret in custom WPF text box

我通过创建自己的自定义控件模板在WPF中设计了自己的文本框。 但是,我似乎无法使插入符号出现。

这是我的文本框样式:

<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背景上可见。

虽然为问题作者提供了他们问题的解决方案,但该解决方案可能无法解决其他用户的问题。 可能导致TextBox中的插入符号消失的另一个原因是将TextBox.Background属性设置为{x:Null}Transparent

发生这种情况是因为WPF框架将插入符号的颜色设置为与Background属性中设置的颜色相反。 由于这两个值没有相反的值,因此插入符号颜色设置为Black 在这些情况下,解决方案非常简单。

我们可以将Background属性的颜色设置为与插入符号相反的颜色,然后将声明颜色的alpha值设置为00 例如,如果您想要白色的插入符号,则将TextBox.Background属性设置为#00000000 (透明的黑色),如果您想要红色的插入符号,则将TextBox.Background属性设置为#0000FFFF (透明的青色), #0000FFFF

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的文本显示在此元素中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM