How to simulate a button click within the code.<span style="font-size:x-small"><em>How do I simulate the press of a WPF button from within the code? I would like to call a method from within my code and have a particular button on a WPF form look (visually behave) like it had been pressed and released as this button does when a user actually clicks it with the mouse.<br/>Why? I have a form with several buttons. When a user presses the appropriate key on the keyboard, I would like to provide visual feedback that the key which had been pressed was equivalent to a particular button.<br/>Such kind solutions like:   <br/><br/> <p class=MsoNormal style="line-height:normal;text-indent:-0.25in;margin:0in 0in 0pt 0.5in;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span style="font-family:'Courier New';color:black;font-size:9pt"><span>1.<span style="font:7pt &quot;Times New Roman&quot;">  </span></span></span><span style="font-family:'Courier New';color:black;font-size:9pt">button1.RaiseEvent(</span><span style="font-family:'Courier New';font-size:9pt">new<span style="color:black"> RoutedEventArgs(Button.ClickEvent));</span></span></p> <p class=MsoNoSpacing style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt"><span>2.<span style="font:7pt &quot;Times New Roman&quot;">  </span></span></span><span style="font-family:'Courier New';font-size:9pt">ButtonAutomationPeer peer = new ButtonAutomationPeer(button1);</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">AutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(button1);<span>                                 </span></span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">invokeProv.Invoke();<br/><br/><span style="font-family:Verdana;font-size:x-small">does not work for me B<span style="font-family:'Verdana', 'sans-serif';font-size:10pt">oth of them call/raise/simulate Click event of button1, but there is no visual feedback. The button on the screen does not look “pressed” and then “released”. May be because the RaiseEvent as well as Automation work too fast, may be because of something else, I don’t know, but you can’t observe the reaction of button1 in cases above.</span></span></span></p> </em></span>© 2009 Microsoft Corporation. All rights reserved.Mon, 17 Aug 2009 07:32:44 Z9ae37a18-0561-4b1a-ba6a-1b626f704fb7http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#9ae37a18-0561-4b1a-ba6a-1b626f704fb7http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#9ae37a18-0561-4b1a-ba6a-1b626f704fb7Victor Sirghiihttp://social.msdn.microsoft.com/Profile/en-US/?user=Victor%20SirghiiHow to simulate a button click within the code.<span style="font-size:x-small"><em>How do I simulate the press of a WPF button from within the code? I would like to call a method from within my code and have a particular button on a WPF form look (visually behave) like it had been pressed and released as this button does when a user actually clicks it with the mouse.<br/>Why? I have a form with several buttons. When a user presses the appropriate key on the keyboard, I would like to provide visual feedback that the key which had been pressed was equivalent to a particular button.<br/>Such kind solutions like:   <br/><br/> <p class=MsoNormal style="line-height:normal;text-indent:-0.25in;margin:0in 0in 0pt 0.5in;background:white;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><span style="font-family:'Courier New';color:black;font-size:9pt"><span>1.<span style="font:7pt &quot;Times New Roman&quot;">  </span></span></span><span style="font-family:'Courier New';color:black;font-size:9pt">button1.RaiseEvent(</span><span style="font-family:'Courier New';font-size:9pt">new<span style="color:black"> RoutedEventArgs(Button.ClickEvent));</span></span></p> <p class=MsoNoSpacing style="text-indent:-0.25in;margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt"><span>2.<span style="font:7pt &quot;Times New Roman&quot;">  </span></span></span><span style="font-family:'Courier New';font-size:9pt">ButtonAutomationPeer peer = new ButtonAutomationPeer(button1);</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">AutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(button1);<span>                                 </span></span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;</span></p> <p class=MsoNoSpacing style="margin:0in 0in 0pt 0.5in"><span style="font-family:'Courier New';font-size:9pt">invokeProv.Invoke();<br/><br/><span style="font-family:Verdana;font-size:x-small">does not work for me B<span style="font-family:'Verdana', 'sans-serif';font-size:10pt">oth of them call/raise/simulate Click event of button1, but there is no visual feedback. The button on the screen does not look “pressed” and then “released”. May be because the RaiseEvent as well as Automation work too fast, may be because of something else, I don’t know, but you can’t observe the reaction of button1 in cases above.</span></span></span></p> </em></span>Fri, 03 Jul 2009 02:50:34 Z2009-07-03T02:50:34Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#ed831c44-0181-4e1a-844b-5ecfb729581fhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#ed831c44-0181-4e1a-844b-5ecfb729581fRath Shetty[MSFT]http://social.msdn.microsoft.com/Profile/en-US/?user=Rath%20Shetty%5bMSFT%5dHow to simulate a button click within the code.<p>your UIA soultion should work ( you can confirm by checking whether OnClick handler getting called) else try the below one.<br/><br/>System.Windows.Controls.<span style="color:#2b91af">Button button = new Button();</span><br/>button.RaiseEvent(<span style="color:blue">new</span> System.Windows.<span style="color:#2b91af">RoutedEventArgs</span>(System.Windows.Controls.<span style="color:#2b91af">Button</span>.ClickEvent, button));</p> <p> </p>Mon, 20 Jul 2009 18:35:33 Z2009-07-20T18:35:33Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#59291b1f-124f-425d-b8df-ee920e523470http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#59291b1f-124f-425d-b8df-ee920e523470Kenneth Hauglandhttp://social.msdn.microsoft.com/Profile/en-US/?user=Kenneth%20HauglandHow to simulate a button click within the code.<a href="http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1a82768a-77fa-4f43-885e-eb59324c8810">http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1a82768a-77fa-4f43-885e-eb59324c8810</a><hr class="sig">KennethMon, 20 Jul 2009 21:31:57 Z2009-07-20T21:31:57Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#04469d12-81c8-4224-9926-4be08a08c0ebhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#04469d12-81c8-4224-9926-4be08a08c0ebJim Zhou - MSFThttp://social.msdn.microsoft.com/Profile/en-US/?user=Jim%20Zhou%20-%20MSFTHow to simulate a button click within the code.<span style="font-family:Verdana;font-size:x-small">Hi,<br/><em>--&gt;does not work for me B</em><span style="font-family:'Verdana', 'sans-serif';font-size:10pt"><span><em>oth of them call/raise/simulate Click event of button1, but there is no visual feedback. The button on the screen does not look “pressed” and then “released”.<br/><br/></em>I also notice that we can not achieve the visual button click appearance via AutomationPeer logic. Alternatively, we can contron the visual of the button and make it looks like being pressed. when may notice that when you click a button, the bounds of button is changed, so we can change the visual feedback via the ScaleTransform property. You can have a look at the following code.<br/>In addition, we can also set the FocusVIsualStyle to get a visual dashed line around the button to simulate a visual feedback more exactly.<br/><br/>Code segment:<br/> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt"><span style=""> </span><span style="color:blue" lang=EN-US>bool</span><span lang=EN-US> flag = <span style="color:blue">false</span>;</span></span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        <span style="color:blue">private</span> <span style="color:blue">void</span> OnRaiseEvent(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        {</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            <span style="color:blue">if</span> (flag == <span style="color:blue">false</span>)</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            {<br/></span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                button1.RenderTransform = <span style="color:blue">new</span> <span style="color:#2b91af">ScaleTransform</span>(0.7, 0.7);</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                <span style="color:green">//you can also control the scale center by setting CenterX/CenterY property</span></span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                </span><span style="font-family:新宋体;font-size:11pt" lang=EN-US>button1.RaiseEvent(<span style="color:blue">new</span> <span style="color:#2b91af">RoutedEventArgs</span>(<span style="color:#2b91af">Button</span>.ClickEvent));</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                flag = <span style="color:blue">true</span>;</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            }</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            <span style="color:blue">else</span></span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            {</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                button1.RenderTransform = <span style="color:blue">new</span> <span style="color:#2b91af">ScaleTransform</span>(1, 1);</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>                flag = <span style="color:blue">false</span>;</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            }</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        }</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        <span style="color:blue">private</span> <span style="color:blue">void</span> OnClick(<span style="color:blue">object</span> sender, <span style="color:#2b91af">RoutedEventArgs</span> e)</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        {</span></p> <p class=MsoNormal style="text-align:left;margin:0cm 0cm 0pt" align=left><span style="font-family:新宋体;font-size:11pt" lang=EN-US>            <span style="color:green">//on the click event</span></span></p> <p class=MsoNormal style="margin:0cm 0cm 0pt"><span style="font-family:新宋体;font-size:11pt" lang=EN-US>        }</span></p> <br/>Thanks.<br/></span></span></span><hr class="sig">Jim Zhou -MSFTFri, 14 Aug 2009 08:19:48 Z2009-08-14T08:19:48Zhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#44689cbe-4678-4ffe-af61-bc4c31c746afhttp://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9ae37a18-0561-4b1a-ba6a-1b626f704fb7#44689cbe-4678-4ffe-af61-bc4c31c746afDanielRosehttp://social.msdn.microsoft.com/Profile/en-US/?user=DanielRoseHow to simulate a button click within the code.<span style="font-size:x-small"><span style="font-size:x-small"> <p>My idea was to use the MouseLeftButtonDown and MouseLeftButtonUp events.</p> </span></span> <p><span style="font-size:x-small"><br/> <pre lang="x-c#">System.Windows.Controls.Button button = new System.Windows.Controls.Button(); button.RaiseEvent(new System.Windows.RoutedEventArgs(System.Windows.Controls.Button.MouseLeftButtonDownEvent, button)); System.Threading.Thread.Sleep(300); button.RaiseEvent(new System.Windows.RoutedEventArgs(System.Windows.Controls.Button.MouseLeftButtonUpEvent, button));</pre> <br/>Unfortunately, I seem to hit a framework bug(?): The button tries to convert the RoutedEventArgs into MouseButtonEventArgs. This fails.</span></p>Fri, 14 Aug 2009 09:47:01 Z2009-08-14T09:47:29Z