在WPF开发过程中,某些场景下,需要模拟点击按钮进行某些操作,也就是用代码调用某些接口,实现对于按钮的点击。但是Button控件提供的接口中并没有这样的方法,它只提供了Click事件。解决办法如下:

ButtonAutomationPeer peer =  
  new ButtonAutomationPeer( someButton );  
  
IInvokeProvider invokeProv =  
  peer.GetPattern( PatternInterface.Invoke )  
  as IInvokeProvider;  
  
invokeProv.Invoke();

 对于ToggleButton而言,解决办法如下:

ToggleButtonAutomationPeer peer = new ToggleButtonAutomationPeer(someButton);  
System.Windows.Automation.Provider.IToggleProvider toggleProvider = peer.GetPattern(PatternInterface.Toggle) as System.Windows.Automation.Provider.IToggleProvider;  
toggleProvider.Toggle(); 

 但是对于ToggleButton,在我的程序中,调用上述代码,发现程序没有反应。经过调查主要原因如下,我的ToggleButton控件的IsChecked属性绑定了后台的数据,并设定了绑定模式为OneWay。
问题在于这个绑定模式上,如果采用默认的绑定模式,上述的代码没有问题,能够正常的工作,但是如果采用的是OneWay的绑定模式,上述代码并不能让ToggleButton实现点击操作。
原因应该是上述代码的内部实现上,最终要设置IsChecked属性,但是由于绑定模式设定是OneWay,即只能有绑定的数据来决定IsChecked的数值,因此代码设置IsChecked是不会有效果的,从而使得上述的代码运行后没有任何反应。
由于程序功能的要求,不可以修改绑定模式,但同时又要实现程序化点击按钮操作的效果,最后我的解决办法是,为ToggleButton定义Command绑定,需要程序化点击ToggleButton时,直接调用ToggleButton的Command绑定实现。核心思路就是引入Command绑定,使得按钮点击和程序化执行的响应函数是同一个,从而变相的实现了模拟按钮点击的效果。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post Navigation