Hot可防止单击按钮时发生默认事件

本文关键字:默认 事件 可防止 单击 按钮 Hot | 更新日期: 2023-09-27 18:28:52

我有按钮点击事件

private void AnswerPressAction(object sender, RoutedEventArgs e)
    {
        Button button = (Button)sender;
        Button validButton = null;
        string buttonName = button.Name;
        button.Background = new SolidColorBrush(Colors.Yellow);
        System.Threading.Thread.Sleep(1000);
        int presedAnswer = 0;
        switch (buttonName)
        {
            case "buttonAnswer1":
                presedAnswer = 1;
                break;
            case "buttonAnswer2":
                presedAnswer = 2;
                break;
            case "buttonAnswer3":
                presedAnswer = 3;
                break;
            case "buttonAnswer4":
                presedAnswer = 4;
                break;
        }
        switch (_valid_answer)
        {
            case 1:
                validButton = buttonAnswer1;
                break;
            case 2:
                validButton = buttonAnswer2;
                break;
            case 3:
                validButton = buttonAnswer3;
                break;
            case 4:
                validButton = buttonAnswer4;
                break;
        }

        if (presedAnswer != 0 && presedAnswer == _valid_answer)
        {
            button.Background = new SolidColorBrush(Colors.Green);
            System.Threading.Thread.Sleep(1000);
            CreateQuestion(1);
        }
        else
        {
            button.Background = new SolidColorBrush(Colors.Red);
            validButton.Background = new SolidColorBrush(Colors.Green);
            System.Threading.Thread.Sleep(1000);
            _gameLevel = 0;
        }
    }

我会在这个功能中改变按钮的颜色,但是,按钮被按下了,我不能改变颜色(按钮是活动的/按下的)。

如何像javascript e.preventDefault()一样,或者在按钮未激活时,在按下按钮之前运行此事件?

Hot可防止单击按钮时发生默认事件

问题是您使用Sleep调用阻塞了线程。如果您想引入延迟,请研究Task.Delay方法。您需要学习一些关于async方法的知识(MSDN上有很多例子,或者您可以搜索SO)。

await设置延迟时,您很可能需要禁用UI,因为延迟允许UI继续更新(并显示您想要的颜色变化),但它也允许用户与UI交互(例如,第二次单击按钮或单击其他按钮)。Enabled属性将在此处提供帮助。