2013-08-18 19 views
0

我想在切換(切換)模式下工作,當我按下一個鍵時,我真的不知道該怎麼做。我嘗試了很多方法,只有「RegisterHotKey」方法工作正常。但是「RegisterHotKey」覆蓋了遊戲中映射的密鑰,這不是我所需要的。所以我試圖使用「GetKeyState」。下面的代碼只能用於一個位置,不管我改變什麼...:在c#中切換狀態 - wpf

private void mw_KeyDown(object sender, KeyEventArgs e){ 
    bool sw = (toggle = !toggle); 
    int tog = (GetKeyState(Key.Tab)); 

    if ((tog & 1) == 1) 
    { 
     if (sw) 
     { 
      System.Windows.MessageBox.Show("go to second position...!"); 
     } 
    } 
    else 
    { 
     System.Windows.MessageBox.Show("go to first position...!"); 
    } 
} 

任何想法或建議我該怎麼做?

謝謝

+0

你可以聲明一個布爾值,作爲類的成員變量,它代表了它的狀態。並更新鍵中的值切換 –

+0

我有這個,但仍然不工作:公共部分類MainWindow:Window { private bool toggle = false; } – user2558921

+0

我在視圖中使用了ToggleButton,並將'IsChecked'屬性綁定到視圖模型中的布爾值,並且您可以使用相同的概念將隱喻轉換爲關鍵筆劃。我會對在事件處理程序中使用消息框持懷疑態度,因爲它們會破壞鍵盤焦點! –

回答

0

解決方案由CodeProject的Sergey Alexandrovich Kryukov提供。

鏈接:solution

public partial class MainWindow : Window 
{ 

    bool toggle; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     MainWindow.KeyDown += (sender, eventArgs) => { if (eventArgs.Key == Key.F7) toggle = !toggle; }; 
    } 

    private void MainWindow_KeyDown(object sender, EventArgs e) 
    { 

     if (toggle) 
     { 
      //System.Windows.MessageBox.Show("go to second position...!"); 
     } 
     else 
     { 
      //System.Windows.MessageBox.Show("go to first position...!"); 
     } 
    } 
} 
+0

我無法修復這裏的代碼縮進......如果別人可以......謝謝。 – user2558921

+0

不客氣。 –