9

我已将我的项目从 windows 8.0 升级到 windows 8.1,并收到一些过时代码的警告。其中一些我已经修复,而另一些则没有。

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

在此处输入图像描述

所有的警告都指向同一个方法,并且它说它已经过时了,我应该怎么做才能得到未过时的代码?

以下是代码:

  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);
    

以上所有代码,调用了已弃用的DetermineVisualState方法,它提供了直接查询窗口布局大小的功能,但这是什么意思呢?

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

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

4

1 回答 1

8

来自 MSDN:如何停止使用 LayoutAwarePage

在 Windows 8 中,Microsoft Visual Studio 模板生成 LayoutAwarePage 类来管理基于 ApplicationViewState 的视觉状态。在 Windows 8.1 中,ApplicationViewState 已弃用,并且 LayoutAwarePage 不再包含在 Windows 应用商店应用的 Visual 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);
     }
 }

Retargeting to Windows 8.1 Preview在此链接中搜索

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

于 2013-10-25T10:05:07.743 回答