2013-01-11 2 views
3

Je vois un comportement étrange avec mon CheckBox et son ordre de focus/tabulation.Checkbox perd le focus avec FocusManager.IsFocusScope = "Vrai"

premier code « travail »:

<Grid>  
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Button Grid.Row="0" Width="100" Height="25"/> 
    <TabControl Grid.Row="1" > 
     <!--TabItem Header="tabItem1" Name="tabItem1"--> 
     <TabItem Header="tabItem1" Name="tabItem1" FocusManager.IsFocusScope="True"> 
      <ScrollViewer> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition /> 
         <RowDefinition /> 
         <RowDefinition /> 
         <RowDefinition /> 
        </Grid.RowDefinitions> 

        <TextBox Grid.Row="0" /> 
        <TextBox Grid.Row="1"/> 
        <CheckBox Grid.Row="2" Content="Test" /> 
        <TextBox Grid.Row="3"/> 
       </Grid> 
      </ScrollViewer> 
     </TabItem> 
    </TabControl> 
</Grid> 

Si vous essayez ceci, l'ordre de tabulation fonctionne très bien - aussi longtemps que vous ne cochez pas la case correspondante. Si je vérifie le CheckBox il perd le focus et l'appui sur l'onglet suivant met le focus sur le bouton.

Si je supprime FocusManager.IsFocusScope="True" tout fonctionne très bien.

Ma question est ce comportement voulu ou un bug?

Répondre

4

Ce comportement est en quelque sorte attendu. Afin de le réparer, vous pouvez ajouter un gestionnaire pour GotFocus sur la fenêtre.

En supposant que votre case à cocher est nommé chkBox, quelque chose comme ceci:

protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e) 
{ 
    base.OnGotKeyboardFocus(e); 

    if (e.Source == chkBox) 
     FocusManager.SetFocusedElement(this, chkBox); 

} 

Ce problème et quelques autres semblables sont décrits plus en détail dans this msdn thread.

+0

cela fonctionnerait. mais je me demande toujours pourquoi cela arrive juste pour la case à cocher aucun autre contrôle d'entrée. – blindmeis

+0

Il se passera également pour d'autres contrôles comme RadioButton, jetez un oeil à la réponse Weifen Luo dans le fil msdn lié, il a une bonne explication sur la raison pour laquelle cela se produit. –

Questions connexes