无法使WPF从UserControl的子控件传递焦点

时间:2011-12-10 16:50:21

标签: wpf user-controls focus focusmanager

我已经定义了一个名为UserControl的{​​{1}}。我得到了TouchTextBox,以便在获得焦点时将焦点放在TouchTextBox上。现在,当用户点击其他控件或按Tab键时,我需要TextBox放弃焦点。以下是TouchTextBox的一些XAML。

TouchTextBox

此控件用作几个<UserControl x:Class="CarSystem.CustomControls.TouchTextBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:fps="clr-namespace:FPS.VirtualKeyboard;assembly=FPS.VirtualKeyboard" mc:Ignorable="d" Focusable="True" GotFocus="UserControl_GotFocus"> <Grid Margin="0"> <Border BorderBrush="{Binding Path=BorderBrush, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" BorderThickness="{Binding Path=BorderThickness, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FocusManager.IsFocusScope="True" VerticalAlignment="{Binding Path=VerticalAlignment, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> <TextBox AcceptsTab="False" AcceptsReturn="False" Background="White" Cursor="{Binding Path=Cursor, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FlowDirection="{Binding Path=FlowDirection, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FontFamily="{Binding Path=FontFamily, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FontSize="{Binding Path=FontSize, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FontStretch="{Binding Path=FontStretch, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FontStyle="{Binding Path=FontStyle, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" FontWeight="{Binding Path=FontWeight, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" GotFocus="TextBox_GotFocus" HorizontalAlignment="{Binding Path=HorizontalAlignment, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" HorizontalContentAlignment="{Binding Path=HorizontalContentAlignment, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" IsEnabled="{Binding Path=IsEnabled, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" LostFocus="TextBox_LostFocus" Margin="1" MaxLength="{Binding Path=MaxLength, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" MaxLines="{Binding Path=MaxLines, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Name="TextBox" Text="{Binding Path=Text, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" TextChanged="TextBox_TextChanged" /> </Border> <Popup IsOpen="{Binding Path=PopupIsOpen, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Name="KeyboardPopup" PlacementTarget="{Binding Path=PlacementTarget, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> <fps:VirtualKeyboard AutoFill="True" Name="PopupKeyboard" /> </Popup> </Grid> </UserControl> 的子控件,然后在UserControl中使用。当此控件获得焦点时,它会按设计显示弹出窗口。但不知何故,当我点击另一个控件或按下标签时,它并没有放弃焦点。

我需要做些什么来改变这项工作?

1 个答案:

答案 0 :(得分:0)

我通常使用的解决方法是在我的IsTabStop="False"上设置UserControl(以防止在UserControl本身上标记),然后在UserControl内使用{ {1}}将内部控件的TemplateBinding绑定到TabIndex的{​​{1}}。

请参阅此问题:Setting tab order in wpf