这就是问题所在。我的测试框架中有以下代码变体(假设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的变通方法。有帮助吗?
答案 0 :(得分:1)
public class CustomApplicationBarIconButton : ApplicationBarIconButton
{
public new event EventHandler Click;
public void RaiseClick()
{
if (Click != null)
Click(this, EventArgs.Empty);
}
}
现在,在您的XAML中将shell:ApplicationBarIconButton
替换为wp8App:CustomApplicationBarIconButton
,您现在可以自动执行此类按钮。
不幸的是,您无法以编程方式替换此类按钮,因为您无法提取事件处理程序并切换它们。并且平台禁止访问任何私有方法/字段。