【问题标题】:Application_Activation screen orientation Windows phone应用程序_激活屏幕方向 Windows phone
【发布时间】:2014-03-25 05:12:18
【问题描述】:

我有一个以横向模式运行的应用程序。因此,我想要一个弹出窗口显示 Applcation_activation 何时被触发,因此身份验证和数据更新可以在后台发生。但问题是应用程序以横向模式运行。

因此,如果我的应用程序在手机处于纵向模式时启动,弹出窗口将如下所示。因此,我想确保方向正确,如果没有在代码中手动进行旋转。

但我无法访问 this.SupportedOrientation,那么如何显示事件 Application_activated 的弹出窗口?

解决方案 一个解决方案当然是不使用该事件或简单地设置一个标志并在每个页面的 navigatedTo 事件处理程序中执行代码。但是,当事件存在时,这不是一个很好的方法。

欢迎提出任何建议

我的两个应用的屏幕截图

肖像

风景

弹出窗口

基本简单的代码。

Popup startup =new popup();
UsercontrolScreen childpopup =new UsercontrolScreen();
startup.child = childpopup;
startup.isOpen = true;

两者的代码相同,只是孩子不同。

【问题讨论】:

  • 您不应在应用程序事件期间显示弹出窗口,而应在 MainPage 中使用 OnNavigatedTo 等页面事件
  • 好的,所以我应该在所有页面上使用 OnNavigatedTo。看起来并不聪明。
  • 如果你的应用只支持横向,我看不出是什么问题。无论手机方向如何,您的 xaml(或弹出窗口)都将始终显示为横向
  • 不通过 application_activated 事件。当然,如果我让弹出窗口出现在 OnNavigatedTo 事件中,它们在横向中没有问题。但这将迫使我在每个页面中编写代码,如果我可以使用 application_activated 事件,我就不必专注于此。
  • 你听说过对象继承吗?在不了解您的要求的情况下,您可以创建一个新的 MyPhoneApplicationPage,在其 OnNavigatedTo 中执行此操作。所有页面都将从它继承,它们都会受益

标签: c# windows-phone-8 popup orientation


【解决方案1】:

如果您希望从 App 类中添加叠加层,并始终使其尊重方向,请将其直接添加到页面内容中

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    var activePage = (PhoneApplicationPage) RootFrame.Content;
    var pageContent = (Grid) activePage.Content;

    UsercontrolScreen childpopup = new UsercontrolScreen();

    Grid.SetRowSpan(childpopup , pageContent.RowDefinitions.Count);
    pageContent.Children.Add(childpopup );
}

使用这种方法,您还需要删除内容。可能在控件上有一个 X 按钮会自行移除,或者可能会触发 Closed 事件,以便应用程序可以将其从网格中移除。您还需要删除 Deactivated 事件中的控件。或者,如果它被停用了两次,则不要在 Activated 事件中再次添加它。

【讨论】:

  • 这看起来很棒,谢谢。我稍后会调查这个。但由于我的 usercontrolScreen 不是弹出窗口。我想我需要创建弹出窗口并将其添加到 pageContent。但看起来棒极了。我会问你是否有时间看看我有stackoverflow.com/questions/22283799/viewport-origin-animation/… 的另一个问题我会为此给你一个赏金,因为我也无法解决这个问题。
  • 不要将控件添加到弹出窗口中,按上述方式添加会覆盖整个屏幕并居中。我忘了提到还要为“childPopup”控件(UsercontrolScreen)设置 ColumnSpan
  • ´弹出窗口如我所愿。然后我遇到了删除它的问题。我决定引入一个关闭按钮,该按钮仅在来自 Application_Activated 事件的情况下显示。然后我在新的点击事件中想做: var activePage = (PhoneApplicationPage)RootFrame.Content; var pageContent = (Grid)activePage.Content; pageContent.Children.Remove(this);但不支持 RootFrame。在创建控件时如何在不解析的情况下访问它的任何想法?
  • 我尝试了 var activePage = ((PhoneApplicationFrame)Application.Current.RootVisual).Content; 而不是 RootFrame但一直没能做到。
  • 您是要从控制代码或应用代码中删除控制吗?当前应用的 RootVisual 是一个 PhoneApplicationFrame。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多