如何在文本框聚焦于 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。我知道我的 TextBox
是 Focused
因为我可以输入:
这里的问题是,文本 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
明确一点:当我的 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。我知道我的 TextBox
是 Focused
因为我可以输入:
这里的问题是,文本 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