153

WPF にはメソッドがないためbutton.PerformClick()、プログラムで WPF ボタンをクリックする方法はありますか?

4

9 に答える 9

199

JaredPar が言ったように、自動化に関する Josh Smith の記事を参照できます。ただし、彼の記事へのコメントに目を通すと、WPF コントロールに対してイベントを発生させるより洗練された方法が見つかります。

someButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));

個人的には、自動化ピアよりも上記のものを好みます。

于 2009-04-09T12:21:38.293 に答える
143

ここで、WPF は WinForms とは少し異なるアプローチをとります。オブジェクトの自動化を API に組み込む代わりに、自動化を担当するオブジェクトごとに個別のクラスがあります。この場合、ButtonAutomationPeerこのタスクを実行するには が必要です。

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

この件に関するブログ記事はこちらです。

注:IInvokeProviderインターフェイスはUIAutomationProviderアセンブリで定義されます。

于 2009-04-08T03:38:08.590 に答える
39

クリックイベントを呼び出したい場合:

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 });

またはトグルボタンを使用します

于 2011-03-16T12:10:57.153 に答える
24
this.PowerButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
于 2012-06-14T07:29:45.360 に答える
6

ソースにアクセスできる場合、プログラムでボタンを「クリック」する 1 つの方法は、ボタンの OnClick イベント ハンドラーを呼び出すことです (または、より WPF のような方法で処理を行っている場合は、ボタンに関連付けられている ICommand を実行します)。 )。

なぜあなたはこれをやっている?たとえば、ある種の自動テストを行っているか、ボタンが実行するのと同じアクションをコードの別のセクションから実行しようとしていますか?

于 2009-04-08T03:35:39.877 に答える