C# 在类库中重写BackKeyPress,这在WP8上可能吗?

C# 在类库中重写BackKeyPress,这在WP8上可能吗?,c#,user-controls,windows-phone-8,popup,class-library,C#,User Controls,Windows Phone 8,Popup,Class Library,我将一个PhoneApplicationPage实例传递给一个类库,并在此类库中弹出一个usercontrol,当我按下back按钮时,整个应用程序退出。昨天我在一个应用程序中解决了这个问题,但是我不能在这个类库案例中使用这个方法。 我试图订阅事件(BackKeyPress),但VS2012显示“父项BackKeyPress”“System.EventHandler”覆盖和委托无法匹配。我查过了,他们匹配 PhoneApplicationPage mContext=。。。; mContext.B

我将一个PhoneApplicationPage实例传递给一个类库,并在此类库中弹出一个usercontrol,当我按下back按钮时,整个应用程序退出。昨天我在一个应用程序中解决了这个问题,但是我不能在这个类库案例中使用这个方法。 我试图订阅事件(BackKeyPress),但VS2012显示“父项BackKeyPress”“System.EventHandler”覆盖和委托无法匹配。我查过了,他们匹配

PhoneApplicationPage mContext=。。。; mContext.BackKeyPress+=新的事件处理程序(父对象\u BackKeyPress); void parent_BackKeyPress(取消事件参数e) { ppChangePIN.IsOpen=false; Application.Current.RootVisual.Visibility=Visibility.Visible; }

这里有什么不对劲吗?另外,我可以在类库中使用navigationservice吗?我之前这样做是为了导航到在类库中创建的页面,如下图所示,它最终会崩溃。有人说我们不能使用类库中的页面,而应该使用Popup(usercontrol)。
mContext.NavigationService.Navigate(新Uri(“/ChangePINPage.xaml”,UriKind.Relative))

我已经成功地做到了这一点:

// or some other method of accessing the current page
// - but via Application, to which you have access also in class library
var currentPage = (PhoneApplicationPage)((PhoneApplicationFrame)Application.Current.RootVisual).Content;
currentPage.BackKeyPress += (sender, args) =>
    {
        // Display dialog or something, and when you decide not to perform back navigation:
        args.Cancel = true;
    };
当然,您必须确保当且仅当CurrentPage是主页面时才执行此代码

我还使用类库中的页面。您可以在类库中使用NavigationService:例如,您可以从如上所述获得的当前页面(
currentPage.NavigationService
)中获取它。也可以使用PhoneApplicationFrame的导航方法:

((PhoneApplicationFrame)Application.Current.RootVisual)
    .Navigate(
        new Uri(
            "/ClassLibraryName;component/SamplePage.xaml", 
            UriKind.Relative));
由于像“/SamplePage.xaml”这样的短URI将在应用程序项目中工作,要导航到类库中的页面,您必须给出完整的位置:“/ClassLibraryName;component/SamplePage.xaml”

但请注意,如果应用程序选择显示消息框以停止退出,它将不会通过认证,如(从):

5.2.4.2–后退按钮:第一屏

从应用程序的第一个屏幕按后退按钮必须关闭应用程序


我已经成功地做到了这一点:

// or some other method of accessing the current page
// - but via Application, to which you have access also in class library
var currentPage = (PhoneApplicationPage)((PhoneApplicationFrame)Application.Current.RootVisual).Content;
currentPage.BackKeyPress += (sender, args) =>
    {
        // Display dialog or something, and when you decide not to perform back navigation:
        args.Cancel = true;
    };
当然,您必须确保当且仅当CurrentPage是主页面时才执行此代码

我还使用类库中的页面。您可以在类库中使用NavigationService:例如,您可以从如上所述获得的当前页面(
currentPage.NavigationService
)中获取它。也可以使用PhoneApplicationFrame的导航方法:

((PhoneApplicationFrame)Application.Current.RootVisual)
    .Navigate(
        new Uri(
            "/ClassLibraryName;component/SamplePage.xaml", 
            UriKind.Relative));
由于像“/SamplePage.xaml”这样的短URI将在应用程序项目中工作,要导航到类库中的页面,您必须给出完整的位置:“/ClassLibraryName;component/SamplePage.xaml”

但请注意,如果应用程序选择显示消息框以停止退出,它将不会通过认证,如(从):

5.2.4.2–后退按钮:第一屏

从应用程序的第一个屏幕按后退按钮必须关闭应用程序



据我所知,你们不能在类库中覆盖backkeypress,也不能在类库中使用导航服务。我不明白你们为什么要覆盖Backkeypers?在这里描述一下你到底想做什么……这样我就能帮助你了好的,很高兴你能帮助我!这里是:我的公司有这个任务来编译一个客户端的dll。这个dll将被我们客户的应用程序引用,以显示几个页面(你说这是不可能的,所以我改用popup usercontrol)。但现在当我按下后退按钮时,我的客户机的应用程序退出,这是不允许的。你明白了吗?不完全明白,但如果你不想关闭back按钮上的应用程序,请在backkeypress事件中写入e.cancel=true。请给我一些关于你的应用程序的简要说明。现在我知道你有一个clicnt就绪的应用程序,在这个应用程序中,你添加了一个dll和用户控件。然后在back键上,你关闭用户控件,然后关闭应用程序据我所知,您不能覆盖类库中的backkeypress,也不能使用类库中的导航服务我不明白您为什么要覆盖Backkeypers?在这里描述一下你到底想做什么……这样我就能帮助你了好的,很高兴你能帮助我!这里是:我的公司有这个任务来编译一个客户端的dll。这个dll将被我们客户的应用程序引用,以显示几个页面(你说这是不可能的,所以我改用popup usercontrol)。但现在当我按下后退按钮时,我的客户机的应用程序退出,这是不允许的。你明白了吗?不完全明白,但如果你不想关闭back按钮上的应用程序,请在backkeypress事件中写入e.cancel=true。请给我一些关于你的应用程序的简要说明。现在我知道你有一个clicnt就绪的应用程序,在这个应用程序中,你添加了一个dll和用户控件。然后在back键上,你关闭用户控件,然后close applicationhi dude,我想我已经试过你上面写的方法了,结果是崩溃(调试器导航失败),但我明天会再试一次。很多人说我们不能在dll中使用页面,你确定你曾经成功地在dll中使用过它吗?@Enniswen是的,它实际上非常简单。您只需使用完整位置,如:
Navigate(新Url(“/ClassLibraryName;component/Pages/SamplePage.xaml”,UriKind.Relative))
。谢谢你,后退按钮现在工作正常,但dll中的导航仍然无法工作,它在这里失败:private void RootFrame\u NavigationFailed(对象发送方,NavigationFailedEventArgs){if(Debugger.IsAttached){Debugger.Break();}}@Enniswen First:NavigationFailedEventArgs的内容(Exeption和Uri)是什么?也许可以在问题中发布它。异常:TargetInvocationException。{System.InvalidOperationException:在System.Windows.Navigation.PageResourceContentLoader.EndLoad(IAsyncResult asyncResult)System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_回调(IAsyncResult result)}System.Exception{System.Invalid