WPF にはメソッドがないためbutton.PerformClick()
、プログラムで WPF ボタンをクリックする方法はありますか?
9 に答える
JaredPar が言ったように、自動化に関する Josh Smith の記事を参照できます。ただし、彼の記事へのコメントに目を通すと、WPF コントロールに対してイベントを発生させるより洗練された方法が見つかります。
someButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
個人的には、自動化ピアよりも上記のものを好みます。
ここで、WPF は WinForms とは少し異なるアプローチをとります。オブジェクトの自動化を API に組み込む代わりに、自動化を担当するオブジェクトごとに個別のクラスがあります。この場合、ButtonAutomationPeer
このタスクを実行するには が必要です。
ButtonAutomationPeer peer = new ButtonAutomationPeer(someButton);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
この件に関するブログ記事はこちらです。
注:IInvokeProvider
インターフェイスはUIAutomationProvider
アセンブリで定義されます。
クリックイベントを呼び出したい場合:
SomeButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
そして、ボタンが押されたように見えるようにしたい場合:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { true });
その後、押されていません:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { false });
またはトグルボタンを使用します
this.PowerButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
ソースにアクセスできる場合、プログラムでボタンを「クリック」する 1 つの方法は、ボタンの OnClick イベント ハンドラーを呼び出すことです (または、より WPF のような方法で処理を行っている場合は、ボタンに関連付けられている ICommand を実行します)。 )。
なぜあなたはこれをやっている?たとえば、ある種の自動テストを行っているか、ボタンが実行するのと同じアクションをコードの別のセクションから実行しようとしていますか?