C# 对Button.IsPressed WPF作出反应

C# 对Button.IsPressed WPF作出反应,c#,wpf,xaml,C#,Wpf,Xaml,我想在按下按钮时更改TextBlock,然后在释放按钮时返回到以前的状态 似乎RepeatButton在这里不是一个解决方案,因为它只对自己被保持而不是被释放做出反应——我需要知道它何时被释放,以便我可以运行一个适当的方法将TextBlock返回到其原始状态。在绝望中,我还尝试循环whilebutton.IsPressed是的,我知道,这是一个糟糕的想法:但没有用——代码会挂起,好像在按钮被释放后IsPressed没有变为false 有什么办法可以实现吗?提前感谢。可能不是最干净的方式,但我决定

我想在按下按钮时更改TextBlock,然后在释放按钮时返回到以前的状态

似乎RepeatButton在这里不是一个解决方案,因为它只对自己被保持而不是被释放做出反应——我需要知道它何时被释放,以便我可以运行一个适当的方法将TextBlock返回到其原始状态。在绝望中,我还尝试循环whilebutton.IsPressed是的,我知道,这是一个糟糕的想法:但没有用——代码会挂起,好像在按钮被释放后IsPressed没有变为false


有什么办法可以实现吗?提前感谢。

可能不是最干净的方式,但我决定为我的按钮创建多个处理程序:单击、指针压缩、指针取消、指针捕获丢失、指针删除。前两个用于处理被按下的按钮,而后三个用于处理释放。由于这里的推荐,我使用了这三种方法:


这是因为PointerReleased有时可能会被释放按钮时触发的其他事件所取代。

PreviewMouseDown和PreviewMouseUp似乎工作正常,如果您希望左键和右键单击都能达到所需的效果:

public partial class MainWindow : Window
{
    private string TextBlockPreviousState = "";
    public MainWindow()
    {
        InitializeComponent();
        ButtonStatusTextBlock.Text = "foo";
    }

    private void StoreAndUpdate()
    {
        TextBlockPreviousState = ButtonStatusTextBlock.Text;
        ButtonStatusTextBlock.Text = "Button Down";
    }

    private void Restore()
    {
        ButtonStatusTextBlock.Text = TextBlockPreviousState;
    }

    private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        StoreAndUpdate();
    }

    private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        Restore();
    }
}

若对你们的场景有效,最好的解决方案是使用触发器和设置器,或者通过样式或模板应用。我觉得这对于我认为的常见问题来说太复杂了。我看看这里能做些什么。谢谢预演房屋向下,预演房屋向上。。。使用这些事件启动/停止流程。