Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#-wpf中切换状态_C#_Wpf_Toggle_State - Fatal编程技术网

在c#-wpf中切换状态

在c#-wpf中切换状态,c#,wpf,toggle,state,C#,Wpf,Toggle,State,当我按下一个键时,我想让一个功能在切换模式下工作,但我真的不知道怎么做。我尝试了很多方法,只有“RegisterHotKey”方法可以正常工作。但是“RegisterHotKey”正在覆盖游戏中映射的密钥,这不是我需要的。所以我尝试使用“GetKeyState”。下面的代码无论我做了什么改变,都只适用于一个职位…: private void mw_KeyDown(object sender, KeyEventArgs e){ bool sw = (toggle = !toggle);

当我按下一个键时,我想让一个功能在切换模式下工作,但我真的不知道怎么做。我尝试了很多方法,只有“RegisterHotKey”方法可以正常工作。但是“RegisterHotKey”正在覆盖游戏中映射的密钥,这不是我需要的。所以我尝试使用“GetKeyState”。下面的代码无论我做了什么改变,都只适用于一个职位…:

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...!");
    }
}
有什么想法或建议我怎么做


谢谢,

解决方案由CodeProject的Sergey Alexandrovich Kryukov提供

链接:


您可以将bool声明为表示其状态的类成员变量。更新切换键down中的值我有这个,但仍然不工作:public partial class main Window:Window{private bool toggle=false;}我在视图中使用了一个ToggleButton,并在视图模型中将'IsChecked'属性绑定到一个布尔值,您可以使用相同的概念将隐喻转换为键击。我不会在事件处理程序中使用消息框,因为它们会破坏键盘焦点!我无法修复这里的代码缩进…如果其他人可以…谢谢。
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...!");
        }
    }
}