2013-01-11 2 views
3

Я вижу странное поведение с моим CheckBox и его ориентацией фокуса/табуляции.Флажок теряет фокус с FocusManager.IsFocusScope = "True"

Сначала некоторые «работает» Код:

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

Если вы попробуете это, вкладка заказ работает отлично - до тех пор, пока вы не поставите флажок. Если я проверю CheckBox, он потеряет фокус, а следующая вкладка нажимает фокус на кнопку.

Если я удалю FocusManager.IsFocusScope="True" все работает нормально.

Мой вопрос - это поведение или ошибка?

ответ

4

Такое поведение как-то ожидается. Чтобы исправить это, вы можете добавить обработчик для GotFocus в окне.

Предполагая, что ваш флажок называется chkBox, что-то вроде этого:

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

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

} 

Эта проблема, и некоторые из них аналогичные, обсуждаются более подробно в this msdn thread.

+0

это будет работать. но я все еще задаюсь вопросом, почему это происходит только для флажка, а не для других элементов управления вводом. – blindmeis

+0

Это также произойдет для других элементов управления, таких как RadioButton, посмотрите на ответ Weifen Luo в связанной теме msdn, у него есть хорошее объяснение, почему это происходит. –