如何以编程方式单击ApplicationBarIconButton?

时间:2013-12-19 14:49:12

标签: c# windows-phone-8 windows-phone appbar

这就是问题所在。我的测试框架中有以下代码变体(假设appBarButton是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的变通方法。有帮助吗?

1 个答案:

答案 0 :(得分:1)

UI自动化,开发人员的祸根。出于某些奇怪的原因,您无法自动化应用程序栏按钮。但是,如果您可以修改应用程序的源代码,则可以使用以下技巧。首先,创建一个新类:

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

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

现在,在您的XAML中将shell:ApplicationBarIconButton替换为wp8App:CustomApplicationBarIconButton,您现在可以自动执行此类按钮。

不幸的是,您无法以编程方式替换此类按钮,因为您无法提取事件处理程序并切换它们。并且平台禁止访问任何私有方法/字段。