如何解决如何将焦点设置到内部TextBox上但闪烁的插入符号可见?
我为WPF文本框制作了此控件模板。
<Style x:Key="SearchTextBox" TargetType="TextBox">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border
BorderBrush="{StaticResource Grey200Brush}"
BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<glph:GlyphAwesome
Grid.Column="0"
Glyph="search"
Margin="4"
FontFamily="{StaticResource MyFontFamily}"
Foreground="{StaticResource Grey200Brush}"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Visibility="{Binding ElementName=TextField,Path=Text,Mode=TwoWay,Converter={StaticResource InverseEmptyStringToVisibilityConverter}}"
FontSize="13"/>
<TextBox
Grid.Column="1"
BorderThickness="0"
Margin="4"
VerticalAlignment="Center"
FontFamily="{StaticResource MyFontFamily}"
Foreground="{StaticResource Blue900Brush}"
x:Name="TextField"
Text="{Binding RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<TextBox
Name="myTextBox"
Text="{Binding FieldId,TargetNullValue='',UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource SearchTextBox}"
MinWidth="150"
VerticalAlignment="Center"
Focusable="True"/>
它应该在文本输入字段旁边显示一个搜索图标。尽管当您开始在内部文本框中输入内容时搜索图标消失了,但我无法通过使用
来显示闪烁的插入符号MyTextField.Focus()
仅当我用鼠标单击文本框(内部一个)时,插入符号才会出现。
我应该在这里做什么? 以某种方式将焦点从郊外转移到内部文本框,还是? 另外,当文本框处于焦点位置而不是开始输入时,如何折叠字形?
解决方法
您的模板是错误的。将TextBox
放在TextBox
内对您来说应该很奇怪。TextBox
使用ScrollViewer
作为主机呈现其内容。这允许文本滚动。内容主机通常可以是任何FrameworkElement
。 必须命名为PART_ContentHost
。
始终检查Microsoft Docs: Control Styles and Templates以获得WPF控件的默认样式和模板,命名部分和视觉状态。在这里,您还可以找到TextBox ControlTemplate Example,并在顶部找到必须是模板一部分的强制命名元素列表。
使用名为TextBox
的{{1}}替换内部ScrollViewer
,以固定模板:
PART_ContentHost
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。