Ale*_*yov 6 c# appbar windows-phone windows-phone-8
这就是问题所在.我的测试框架中有以下代码变体(假设appBarButton是ApplicationBarIconButton):
var bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
var method = typeof(ApplicationBarIconButton)
.GetMethod("ClickEvent", bindingFlags);
if (method != null)
{
method.Invoke(appBarButton, null);
}
Run Code Online (Sandbox Code Playgroud)
要么
IInvokeProvider invokableButton;
var isInvokable = (invokableButton = appBarButton as IInvokeProvider) != null;
if (isInvokable)
{
invokableButton.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
两件都不起作用.所以我想找到一些以编程方式单击ApplicationBarIconButton的变通方法.有帮助吗?
UI 自动化是开发人员的祸根。由于某些奇怪的原因,您无法自动化应用程序栏按钮。但是,如果您可以修改应用程序的源代码,则可以采用以下技巧。首先,创建一个新类:
public class CustomApplicationBarIconButton : ApplicationBarIconButton
{
public new event EventHandler Click;
public void RaiseClick()
{
if (Click != null)
Click(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的 XAML 中替换shell:ApplicationBarIconButton为wp8App:CustomApplicationBarIconButton,您现在可以自动化此类按钮。
不幸的是,您无法以编程方式替换此类按钮,因为您无法提取事件处理程序并切换它们。并且平台禁止访问任何私有方法/字段。