触发按钮的IsPressed属性,后面是代码

时间:2014-02-27 15:46:24

标签: c# wpf

我有一个带按钮的菜单。当用户按下按钮时,它将执行相同的方法,直到他释放按钮。换句话说,我在MouseDown上启动任务,然后在MouseUp上停止该任务。

这是我的按钮

<Button
    x:Name="pushButton"
    Focusable="False"
    Content="{Binding ButtonLabel}"        
    PreviewMouseDown="StartTask"
    PreviewMouseUp = "StopTask"        
 />

我希望能够使用键盘快捷键按下按钮因此,我订阅了主窗口事件PreviewKeyDownPreviewKeyUp。这些事件被正确触发,我可以在键关闭时启动任务,并在键启动时停止任务。 我希望按钮将其状态更改为按下状态,以便用户可以直观地看到它。如何用c#更改按钮的状态?


修改

我最终通过反射改变了它的IsPressed值,因为setter是私有的:

typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(BtnInstance , new object[] { true }); 

1 个答案:

答案 0 :(得分:1)

这可能会让你成为那里的一部分。在VS2013中,我右键单击按钮,选择编辑模板,然后选择编辑复制..然后在它创建的样式中,它创建的ControlTemplate中有一个“RenderPressed”属性。默认情况下它与IsPressed绑定,但我在ViewModel中将绑定更改为bool,我可以切换按钮。