2012-04-03 10 views
1

übertragen Ich erstelle ein Benutzersteuerelement und set Focusable = "True". Dieser Usercontrol haben folgende TastenWPF: Fokus wird nicht ordnungsgemäß in Usercontrol

<Button Grid.Column="1" Name="btnPreviousClip" Focusable="True" Template="{StaticResource controlButtonStart}" Margin="2,2,2,4" Click="btnReverse_Click" KeyboardNavigation.TabIndex="0" KeyDown="btnPreviousClip_KeyDown" /> 
<Button Grid.Column="2" Name="btnReverse" Focusable="True" Template="{StaticResource controlButtonReverse}" Margin="2,2,2,4" Click="btnReverse_Click" KeyboardNavigation.TabIndex="1" KeyDown="btnReverse_KeyDown" /> 
<Button Grid.Column="3" Name="btnPlay" Focusable="True" Template="{StaticResource controlButtonPlay}" Click="btnPlay_Click" Margin="2,2,2,4" KeyboardNavigation.TabIndex="2" KeyDown="btnPlay_KeyDown" /> 
<Button Grid.Column="3" Name="btnPause" Focusable="True" Template="{StaticResource controlButtonPause}" Margin="2,2,2,4" Visibility="Hidden" Click="btnPause_Click" KeyboardNavigation.TabIndex="3" KeyDown="btnPause_KeyDown" /> 
<Button Grid.Column="4" Name="btnForward" Focusable="True" Template="{StaticResource controlButtonForward}" Margin="2,2,2,4" Click="btnForward_Click" KeyboardNavigation.TabIndex="4" KeyDown="btnForward_KeyDown" /> 
<Button Grid.Column="5" Name="btnNextClip" Focusable="True" Template="{StaticResource controlButtonEnd}" Margin="2,2,2,4" Click="btnForward_Click" KeyboardNavigation.TabIndex="5" KeyDown="btnNextClip_KeyDown" /> 

<Button Grid.Column="7" Name="btnFav" Focusable="True" Template="{StaticResource controlButtonFav}" Margin="2,2,2,4" KeyboardNavigation.TabIndex="6" Click="btnFav_Click" KeyDown="btnFav_KeyDown" /> 
<Button Grid.Column="8" Name="btnResize" Focusable="True" Template="{StaticResource controlButtonResize}" Margin="2,2,2,4" Click="btnResize_Click" KeyboardNavigation.TabIndex="7" KeyDown="btnResize_KeyDown" /> 

Auch schrieb ich das bekam Fokus Ereignis dieser Usercontrol als

private void UserControl_GotFocus(object sender, RoutedEventArgs e) 
     { 

      Keyboard.Focus(btnPlay); 
     } 

obigen Code folgt funktioniert gut und der Fokus wird auf btnplay. aber jetzt, wenn ich Tab drücken, dann ist der Fokus auf die Übertragung von Benutzersteuerung (anstelle von btnForward). Ich versuche viel, das Problem herauszufinden und viel zu googeln, aber bisher kein Glück.

Hier möchte ich mitteilen, dass sobald ich eine beliebige Taste mit Leertaste drücken, dann Tab-Sequenz (Fokus) funktioniert gut.

Bitte schlagen Sie vor, dass, wo ich falsch mache.

+0

Haben Sie versucht, IsTabStop = "False" für die Benutzersteuerung? – LPL

Antwort

0

Ohne den Code der für die Schaltflächen angegebenen ControlTemplates zu sehen, ist es schwierig, diese Frage genauer zu beantworten.

Sie sollten die KeyboardNavigation.TabNavigation="Local" für das UserControl festlegen und entfernen Sie die Focusable="True". Auf diese Weise werden die TabIndex-Eigenschaften, die Sie für die Schaltflächen innerhalb des Benutzersteuerelements angegeben haben, nur im lokalen Bereich berücksichtigt, und der Fokus wird vom Benutzersteuerelement zum nächsten geeigneten Element im übergeordneten Container verschoben, sobald das Steuerelement mit dem höchsten Tabindex (btnResize) wurde konzentriert.

Bitte beachten Sie, dass das Ereignis GotFocus jedes Mal ausgelöst wird, wenn eine Fokusänderung auftritt. Wenn Sie diesen Event-Handler verwenden, können Sie den Fokus innerhalb des UserControls nicht mehr ändern: Sobald er ausgelöst wird, wird der Fokus immer wieder auf den Play-Button zurückgesetzt. Sie sollten den Ereignishandler entfernen.