繁体   English   中英

对Button.IsPressed WPF做出反应

[英]React to Button.IsPressed WPF

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

在这里看来,RepeatButton并不是解决方案,因为它只是对自身被保留而不被释放作出反应-我需要知道何时释放它,以便我可以运行适当的方法将TextBlock返回到其原始状态。 绝望的我也试图循环while(button.IsPressed) (是的,我知道,很糟糕的主意:(),但无济于事-代码会挂起(好像IsPressed在释放按钮之后没有变为false)。

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

也许不是最干净的方法,但是我决定为按钮创建多个处理程序: ClickPointerPressedPointerCancelledPointerCaptureLostPointerReleased 前两个用于处理被按下的按钮,后三个用于处理释放。 由于这里的推荐,我使用了这三个:

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.pointer发行

这是因为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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM