Daw*_*wid 7 c# wpf xaml wpf-style
我的一个视图中有以下TextBox:
<TextBox Name="SearchTerm" Style="{StaticResource SearchTermTextBoxStyle}"
Text="{Binding TemplatesViewModel.SearchTerm, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
attachedProperties:Watermark.Watermark="Some watermark text"
KeyboardNavigation.TabIndex="5" />
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,应用了以下样式:
<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>
Run Code Online (Sandbox Code Playgroud)
问题是当我获得焦点在SearchTerm TextBox上时,光标根本不会出现.首先我想到的是简单的结论:可能我只是逻辑焦点,而不是键盘焦点.但事实并非如此.我可以自由地将一些文本输入到TextBox中,但我仍然没有得到光标.当我使用鼠标左键进入此TextBox时,光标出现并按预期闪烁.
那么我的TextBox有什么问题呢?
问题出在TextBox
您放入TextBox
's 的控件上ControlTemplate
。我想当你关注 (parent) 时TextBox
,它不会关注ControlTemplate
's TextBox
。
当您使用左键单击时,它会直接转到ControlTemplate
's TextBox
,因此您的光标会闪烁。
如果您注意到原始(默认)TextBox
的ControlTemplate
,它用于ScrollViewer
托管内容,所以我建议您更改
<TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
到
<ScrollViewer x:Name="PART_ContentHost" Focusable="False" />
Run Code Online (Sandbox Code Playgroud)
这将自动显示Text
来自 的TemplatedParent
。并且还让您专注于(父级)TextBox
。
归档时间: |
|
查看次数: |
467 次 |
最近记录: |