【问题标题】:Trigger IsPressed property of button with code behind使用后面的代码触发按钮的 IsPressed 属性
【发布时间】:2014-02-27 15:46:23
【问题描述】:

我有一个带按钮的菜单。当用户按下按钮时,它将执行相同的方法,直到他释放按钮。换句话说,我在 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 }); 

【问题讨论】:

  • 可以在后面的代码中设置IsPressed属性吗?
  • IsPressed 没有设置方法我只能读取它:(
  • 我认为,您需要ToggleButton 来执行此操作。他有 IsChecked 属性,可以有三种状态:真、假和空。
  • @AnatoliyNikolaev 这是个好主意。您还可以使用 bool 属性创建自己的按钮,并在该按钮上设置一个数据触发器,用于设置样式和按下样式。我会尝试将一些东西放在一起并发布作为答案。

标签: c# wpf


【解决方案1】:

这可能会让您有所收获。在 VS2013 中,我右键单击按钮,选择编辑模板然后编辑副本。然后在它创建的样式中,它创建的 ControlTemplate 中有一个“RenderPressed”属性。它默认绑定到 IsPressed,但我在 ViewModel 中将绑定更改为 bool,并且能够切换按钮。

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 2013-09-25
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多