button.PerformClick()
WPF 에는 방법 이 없으므로 프로그래밍 방식으로 WPF 버튼을 클릭하는 방법이 있습니까?
답변
WPF는 여기서 WinForms와 약간 다른 접근 방식을 취합니다. API에 내장 된 객체를 자동화하는 대신 자동화를 담당하는 각 객체에 대해 별도의 클래스가 있습니다. ButtonAutomationPeer
이 경우이 작업을 수행하기 위해 가 필요합니다 .
ButtonAutomationPeer peer = new ButtonAutomationPeer(someButton);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
여기에 주제에 대한 블로그 게시물입니다.
참고 : IInvokeProvider
인터페이스는 UIAutomationProvider
어셈블리에 정의되어 있습니다.
답변
JaredPar가 말했듯이 자동화에 대한 Josh Smith의 기사를 참조 할 수 있다고 말했습니다. 그러나 그의 기사에 대한 의견을 살펴보면 WPF 컨트롤에 대해 이벤트를 발생시키는 더 우아한 방법을 찾을 수 있습니다
someButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));
나는 개인적으로 자동화 피어 대신 위의 것을 선호합니다.
답변
클릭 이벤트를 호출하려는 경우 :
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 });
또는 ToggleButton을 사용하십시오
답변
this.PowerButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
답변
소스에 액세스 할 수있는 경우 버튼을 프로그래밍 방식으로 “클릭”하는 한 가지 방법은 버튼의 OnClick 이벤트 핸들러를 호출하거나보다 WPF-y 방식으로 작업을 수행하는 경우 버튼과 관련된 ICommand를 실행하는 것입니다. ).
왜 이런 짓을하는? 예를 들어 일종의 자동 테스트를 수행 중입니까, 아니면 다른 코드 섹션에서 버튼이 수행하는 것과 동일한 작업을 수행하려고합니까?
답변
로 그렉 D가 말했다, 나는 대안을 생각 Automation
부르는하기 위해 MVVM 패턴 (클릭 이벤트가 발생하고 명령이 실행)되어 사용 버튼을 클릭 OnClick
반사를 사용하는 방법 :
typeof(System.Windows.Controls.Primitives.ButtonBase).GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(button, new object[0]);
답변
사용하는 경우 MVVM 에 대한 명령 패턴 버튼 기능 (권장 연습), 간단한 방법은 효과 트리거 할 버튼은 다음과 같다 :
someButton.Command.Execute(someButton.CommandParameter);
버튼이 트리거 하는 Command 객체를 사용 하고 XAML에 의해 정의 된 CommandParameter를 전달합니다 .