2013-12-19 4 views
6

그래서 질문입니다. 내 테스트 프레임 워크에서 다음 코드 변종이 (appBarButton를 가정하는 것은 ApplicationBarIconButton입니다) :프로그래밍 방식으로 ApplicationBarIconButton을 클릭하는 방법은 무엇입니까?

var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; 
var method = typeof(ApplicationBarIconButton) 
      .GetMethod("ClickEvent", bindingFlags); 

if (method != null) 
{ 
    method.Invoke(appBarButton, null); 
} 

또는

두 조각이 작동하지 않습니다
IInvokeProvider invokableButton; 
var isInvokable = (invokableButton = appBarButton as IInvokeProvider) != null; 
if (isInvokable) 
{ 
    invokableButton.Invoke(); 
} 

. 그래서 프로그래밍 방식으로 ApplicationBarIconButton을 클릭하는 몇 가지 해결 방법을 찾고 싶습니다. 어떤 도움이 필요합니까?

+2

죄송합니다. 프로그래밍 방식으로 클릭을 수행 한 이유를 모르겠습니다. 왜 당신은 이벤트를 발생시키지 않거나 클릭 이벤트에 의해 호출 된 메소드를 호출하지 않습니까? – rubenfa

+0

몇 가지 단계를 자동화하기 위해 기존 테스트 프레임 워크 ([link] (https://github.com/Expensify/WindowsPhoneTestFramework))를 확장하고 싶습니다. 이 프레임 워크는 AppBar가 관련된 경우에 따라 제대로 작동하지 않는 것 같습니다. –

+2

아, 알았어. AppBar가 PhoneApplicationPage 클래스에 의해 노출되고 Phone Shell에 의해 관리되기 때문에 가능한지 모르겠습니다. – rubenfa

답변

1

UI 자동화, 개발자의 단점. 이상한 이유로 어플리케이션 바 버튼을 자동화 할 수 없습니다. 그러나 응용 프로그램의 소스 코드를 수정할 수있는 경우 다음 트릭을 사용할 수 있습니다. 첫째, 새로운 클래스 생성 :

public class CustomApplicationBarIconButton : ApplicationBarIconButton 
{ 
    public new event EventHandler Click; 

    public void RaiseClick() 
    { 
     if (Click != null) 
      Click(this, EventArgs.Empty); 
    } 
} 

지금, 당신의 XAML에 wp8App:CustomApplicationBarIconButtonshell:ApplicationBarIconButton 교체를하면 이제 버튼을 자동화 할 수 있습니다.

이벤트 처리기를 추출하고 전환 할 수 없기 때문에 이러한 단추를 프로그래밍 방식으로 바꿀 수는 없습니다. 모든 개인적인 방법/필드에 액세스하는 것은 플랫폼에 의해 금지됩니다.

+1

답장을 보내 주셔서 감사합니다. 이미 이벤트 처리기 (MVVM 호환성 만) 대신 명령을 사용하여 자체 클래스를 구현했으며 매력적으로 작동합니다. –