Windows 8.1如何修复这个过时的代码?

时间:2013-10-25 09:35:04

标签: c# windows windows-store-apps obsolete

我已将项目从Windows 8.0升级到Windows 8.1,并获得了一些过时代码的警告。其中一些我已修复,其中一些没有。

以下是我无法修复且无法找到任何信息的最后警告的图像。

enter image description here

所有警告都指的是相同的方法,它说它已经过时了,我该怎么办才能获得不过时的代码?

以下是代码:

  1. 警告编号2。

    /// <summary>
    /// Translates <see cref="ApplicationViewState" /> values into strings for visual state
    /// management within the page.  The default implementation uses the names of enum values.
    /// Subclasses may override this method to control the mapping scheme used.
    /// </summary>
    /// <param name="viewState">View state for which a visual state is desired.</param>
    /// <returns>Visual state name used to drive the
    /// <see cref="VisualStateManager" /></returns>
    /// <seealso cref="InvalidateVisualState" />
    protected virtual string DetermineVisualState(ApplicationViewState viewState)
    {
        return viewState.ToString();
    }
    
  2. 警告编号1。

    // Set the initial visual state of the control
    VisualStateManager.GoToState(control, DetermineVisualState(ApplicationView.Value), false);
    
  3. 警告编号3。

    string visualState = DetermineVisualState(ApplicationView.Value);
    
  4. 以上所有代码,对不推荐使用的DetermineVisualState方法的调用,它提供了直接查询窗口布局大小,但它是什么意思?

    注意:这是LayoutAwarePage,所以我这里没有写任何代码,这是Windows 8.0的实现。

    任何帮助将不胜感激,并提前感谢!

1 个答案:

答案 0 :(得分:8)

来自MSDN:How to stop using the LayoutAwarePage

  

在Windows 8中,Microsoft Visual Studio模板生成   LayoutAwarePage类基于管理视觉状态   ApplicationViewState。在Windows 8.1中,ApplicationViewState是   弃用,LayoutAwarePage不再包含在Visual中   Windows应用商店应用的Studio模板。继续使用   LayoutAwarePage可以破坏您的应用程序。要解决此问题,请将视图重写为   适应新的最小视图状态,并根据创建事件   窗口大小。如果您将应用更新为不同的尺寸,则必须   处理Window.Current和Window.SizeChanged事件以适应   您的应用的UI到新的大小。我们建议您停止使用   LayoutAwarePage,直接从Page类继承类。   以下是如何停止使用LayoutAwarePage:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    this.Loaded += PageLoaded;
    this.Unloaded += PageUnloaded;
 }

 private void PageUnloaded(object sender, RoutedEventArgs e)
 {
     Window.Current.SizeChanged -= Window_SizeChanged;
 }

 private void PageLoaded(object sender, RoutedEventArgs e)
 {
     Window.Current.SizeChanged += Window_SizeChanged;
 }

 private void Window_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
 {
     if (e.Size.Width <= 500)
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
     else if (e.Size.Height > e.Size.Width)
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
     else
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
 }

Search for Retargeting to Windows 8.1 Preview in this link

  

打开LayoutAwarePage并将DetermineVisualState方法更改为no   更长时间依赖于ApplicationViewState而是依赖于   窗口大小。例如,您可以在返回VerticalLayout时返回   你的应用程序窗口宽度小于500px和Horizo​​ntalLayout时   它大于500px。由于此方法是虚拟的,因此设计为   在需要时在每个页面中被覆盖(因为它是在   SplitPage)。如果您的布局和,您可以在任何页面上覆盖它   视觉状态不同。只需确保重命名视觉状态   每个页面都匹配这些新字符串。