[英]React to Button.IsPressed WPF
我想在按下按钮时更改TextBlock,然后在释放按钮时返回到之前的状态。
在这里看来,RepeatButton并不是解决方案,因为它只是对自身被保留而不被释放作出反应-我需要知道何时释放它,以便我可以运行适当的方法将TextBlock返回到其原始状态。 绝望的我也试图循环while(button.IsPressed)
(是的,我知道,很糟糕的主意:(),但无济于事-代码会挂起(好像IsPressed在释放按钮之后没有变为false)。
有什么办法可以实现? 提前致谢。
也许不是最干净的方法,但是我决定为按钮创建多个处理程序: Click
, PointerPressed
, PointerCancelled
, PointerCaptureLost
, PointerReleased
。 前两个用于处理被按下的按钮,后三个用于处理释放。 由于这里的推荐,我使用了这三个:
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.