2011-12-10 26 views
0

私はTouchTextBoxと呼ばれるUserControlを定義しました。フォーカスを受け取ったときにTouchTextBoxにフォーカスを移動させてTextBoxにフォーカスしました。ユーザーが別のコントロールをクリックしたときやタブを押したときにフォーカスをあきらめるためには、TouchTextBoxが必要です。 TouchTextBoxのXAMLの一部を次に示します。WPFがUserControlの子コントロールからフォーカスを移動できない

<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> 

このコントロールは、その後、私のMainWindowで使用されているUserControl年代のカップル上の子コントロールとして使用されています。このコントロールがフォーカスを受け取ると、Popupが設計どおりに表示されます。しかし、どういうわけか別のコントロールやタブをクリックしたときにフォーカスをあきらめていません。

この作品を制作するにはどうすればよいですか?

トニー

+0

私たちのイベントハンドラ(のLostFocus、GotFoucs)内のコードを表示してください。 –

答えて

0

私は通常使用の回避策は、私のUserControlIsTabStop="False"を設定することです(UserControlそれ自体にタブ移動を防ぐため)、その後、UserControlUserControlに内部コントロールのTabIndexにバインドするTemplateBindingを使用's TabIndex

は、この質問を参照してください:Setting tab order in wpf

関連する問題