2016-11-09 13 views
0

Ich habe es für F1, F3, F7 für drei Tasten eingestellt. Das Problem ist, muss die Taste vor dem Drücken F1 oder F3 ... I TAB auf der Tastatur verwenden möchten fokussiert werden zwischen Tasten zu konzentrieren.Wie navigiere ich zwischen den Tasten (Fokus), wenn ich Tab in wpf drücke?

<Grid Grid.Row="0" Background="#373737"> 
    <StackPanel Orientation="Horizontal" Margin="0,0,0,1"> 
     <Button x:Name="btnPay" FontSize="13" FontWeight="ExtraBold" Margin="0,0,1,0" BorderThickness="0" Width="120" KeyDown="btnPay_KeyDown"> 
      <StackPanel Orientation="Vertical"> 
       <Image Source="/Image/receipt.png" Width="40" Height="40" /> 
       <TextBlock VerticalAlignment="Center" Margin="5,0" Foreground="White">Thanh toán (F1)</TextBlock> 
      </StackPanel> 
     </Button> 
     <Button x:Name="btnClear" FontSize="13" FontWeight="ExtraBold" Margin="0,0,1,0" BorderThickness="0" Width="120" KeyDown="btnClear_KeyDown"> 
      <StackPanel Orientation="Vertical"> 
       <Image Source="/Image/eraser.png" Width="40" Height="40" /> 
       <TextBlock VerticalAlignment="Center" Margin="5,0" Foreground="White">Xóa (F2)</TextBlock> 
      </StackPanel> 
     </Button> 
    </StackPanel> 
    <Button x:Name="btnLogOut" FontSize="13" FontWeight="ExtraBold" Width="120" Margin="0,0,1,1" BorderThickness="0" KeyDown="btnLogOut_KeyDown" 
      HorizontalAlignment="Right"> 
     <StackPanel Orientation="Vertical"> 
      <Image Source="/Image/password.png" Width="40" Height="40" /> 
      <TextBlock VerticalAlignment="Center" Margin="5,0" Foreground="White">Log Out (F6)</TextBlock> 
     </StackPanel> 
    </Button> 
</Grid> 
+0

Standardmäßig ändert "Tab" das fokussierte Element zum nächsten Element. Kannst du den XAML mit den Buttons hier posten? Haben Sie andere Steuerelemente im selben Layout mit den Schaltflächen? –

+0

Uploaded xaml ... –

+0

Sie meinen, dass das Drücken von F1 Aktionen auf "Play", Drücken von F2, Aktion auf "Xóa" und Drücken von F6 Aktion auf "Abmelden" tut? Ist das der Fall? –

Antwort

0

Ihre Abhilfe scheint ein zusätzliches Problem, anstatt eine Lösung zu sein. Anstatt die PreviewKeyDown Ereignisse aller Schaltflächen zu verwenden, verwenden Sie einfach das Fenster und entscheiden Sie, was zu tun ist, basierend auf der gedrückten Taste.

Fenster:

<Window PreviewKeyDown="Window_PreviewKeyDown"> 

-Code hinter:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    bool handled = true; 
    if (!Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) 
    { 
     switch (e.Key) 
     { 
      case Key.F1: 
       { 
        Play(); 
        break; 
       } 
      // ... 
      case Key.F6 
       { 
        LogOut(); 
        break; 
       } 
      default: 
       handled = false; 
       break; 
     } 
    } 
    else 
    { 
     switch (e.Key) 
     { 
      case Key.C: 
       { 
        Copy(); 
        break; 
       } 
      case Key.V: 
       { 
        Paste(); 
        break; 
       } 
      case Key.Z: 
       { 
        Undo(); 
        break; 
       } 
      case Key.Y: 
       { 
        Redo(); 
        break; 
       } 
      default: 
       handled = false; 
       break; 
     } 
    } 
    e.Handled = handled; 
} 

Alternativ (dies en noch bessere Lösung wäre) Sie Ihre Befehle wie ICommand implementieren könnte und sie für Eingabebindungen.

<Window.InputBindings> 
    <KeyBinding Modifiers="Control" Key="S" Command="{StaticResource Save}"/> 
    <KeyBinding Modifiers="Control+Shift" Key="S" Command="{StaticResource SaveAs}"/> 
    <KeyBinding Modifiers="Control" Key="Z" Command="{StaticResource Undo}"/> 
    <KeyBinding Modifiers="Control" Key="Y" Command="{StaticResource Redo}"/> 
    <KeyBinding Key="F1" Command="{StaticResource Play}"/> 
    <KeyBinding Key="F6" Command="{StaticResource LogOut}"/> 
</Window.InputBindings> 
Verwandte Themen