如何在文本框聚焦于 wpf 时显示文本 cursor/caret?

How to display the text cursor/caret when a textbox is focused in wpf?

明确一点:当我的 SignupWindow 加载时,我的 TextBox 已经 专注。我的问题是文本 cursor/caret 不会显示,除非我点击我的文本框(我认为这将是一个 UI 问题)。


我已经将我的 TextBox 集中在 Window 级别:

<Window x:Name="this"
        x:Class="Project.MVVM.Views.Windows.SignupWindow"
        <!-- some namespaces and properties here-->
        FocusManager.FocusedElement="{Binding ElementName=UsernameTextBox}">

我的TextBox:

<TextBox x:Name="UsernameTextBox"
            Grid.Row="2"
            Width="303"
            Height="38"
            Text="{Binding Path=CurrentAccount.Username}"
            Style="{StaticResource TextBoxTheme}" />

这是页面 加载时的样子:

上图未显示文字 cursor/caret。我知道我的 TextBoxFocused 因为我可以输入:


这里的问题是,文本 cursor/caret 仅在我单击 TextBox:

时显示


这是我设置文本框样式的方式(如果这与问题相关):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type TextBox}"
           x:Key="TextBoxTheme">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TextBox}">
                    <Border CornerRadius="12"
                            Background="#2E3135"
                            Width="{TemplateBinding Width}"
                            Height="{TemplateBinding Height}">
                        <TextBox Text="{Binding Path=Text,
                                                RelativeSource={RelativeSource Mode=TemplatedParent},
                                                UpdateSourceTrigger=PropertyChanged,
                                                Mode=TwoWay}"
                                 BorderThickness="0"
                                 VerticalContentAlignment="Center"
                                 Padding="20,0,20,0"
                                 Background="Transparent"
                                 Foreground="#B8BDC1"
                                 CaretBrush="#B8BDC1" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

您在 TextBox 中定义了 TextBox,我猜您希望在显示 window 时聚焦内部 TextBox,但实际上,外部 [=11] =] 是重点。

我认为嵌套TextBox不是不可能,而是麻烦的根源。为啥不定义一个正统但长得一模一样的Style?

<Style x:Key="TextBoxTheme" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Foreground" Value="#B8BDC1"/>
    <Setter Property="CaretBrush" Value="#B8BDC1"/>
    <Setter Property="Padding" Value="20,0,20,0"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border CornerRadius="12"
                        Background="#2E3135">
                    <ScrollViewer x:Name="PART_ContentHost"
                                  Focusable="false"
                                  HorizontalScrollBarVisibility="Hidden"
                                  VerticalScrollBarVisibility="Hidden"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

尝试向触发器/事件中的这些属性添加 C# 代码(如果您需要确切的代码,请告诉我): image