我的一个观点中有以下TextBox:
<TextBox Name="SearchTerm" Style="{StaticResource SearchTermTextBoxStyle}"
Text="{Binding TemplatesViewModel.SearchTerm, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
attachedProperties:Watermark.Watermark="Some watermark text"
KeyboardNavigation.TabIndex="5" />
如您所见,已应用以下样式:
<Style x:Key="SearchTermTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding (attachedProperties:Watermark.Watermark), Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" x:Name="DefaultTextPrompt"
Foreground="#888888" FontStyle="Italic" HorizontalAlignment="Left"
VerticalAlignment="Center" IsHitTestVisible="False" Visibility="Hidden"
Margin="5,-1,0,0" />
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="" />
<Condition Property="IsKeyboardFocusWithin" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="DefaultTextPrompt" Value="Visible" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
问题是当我获得对SearchTerm TextBox的关注时,光标根本不会出现。首先我想到的是简单的结论:可能我只是逻辑焦点,而不是键盘焦点。但事实并非如此。我可以自由地将一些文本输入到TextBox中,但我仍然没有得到光标。当我使用鼠标左键进入此TextBox时,光标出现并按预期闪烁 那么我的TextBox有什么问题?
答案 0 :(得分:0)
问题出在放在TextBox
的{{1}}内的TextBox
控件上。我想当您专注于{父} ControlTemplate
时,它不会关注TextBox
的{{1}}。
使用左键单击时,它直接进入ControlTemplate
的{{1}},因此光标闪烁。
如果您注意到TextBox
的原始(默认)ControlTemplate
,它使用TextBox
来托管内容,所以我建议您更改
TextBox
到
ControlTemplate
这将自动显示ScrollViewer
中的<TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
。另外,您也可以专注于{parent} <ScrollViewer x:Name="PART_ContentHost" Focusable="False" />
。