Windows 8.1 Как исправить этот устаревший код?

Я обновил свой проект до Windows 8.1 с Windows 8.0 и получил несколько предупреждений об устаревших кодах. Некоторые из них я исправил, а некоторые нет.

Вот изображение последних предупреждений, которые я не смог исправить и не смог найти никакой информации.

введите здесь описание изображения

Все предупреждения относятся к одному и тому же методу, и там написано, что он устарел, что делать, чтобы получить не устаревший код?

Вот коды:

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

Все приведенные выше коды, вызовы метода DefineVisualState, который устарел, предлагает напрямую запрашивать размеры макета окна, но что это значит?

Примечание. Это LayoutAwarePage, поэтому я не писал здесь никакого кода, это реализация Windows 8.0.

Любая помощь будет оценена и спасибо заранее!


person Misha Zaslavsky    schedule 25.10.2013    source источник
comment
Вы видели этот пример для Windows 8.1? Любая помощь?   -  person Roger Rowland    schedule 25.10.2013
comment
Да, это первый пример, который я увидел, ничего не помогает, потому что он не использует LayoutAwarePage.   -  person Misha Zaslavsky    schedule 25.10.2013
comment
Правильно — как говорится В предварительной версии Windows 8.1 LayoutAwarePage удаляется из шаблонов приложений Магазина Windows по умолчанию — поэтому в статье приводится возможная альтернатива. Разве это невозможно для вас?   -  person Roger Rowland    schedule 25.10.2013
comment
Может быть, это может помочь, но я использую LayoutAwarePage на всех своих страницах, он делает то же самое? и могу ли я изменить немного кода, чтобы получить те же результаты?   -  person Misha Zaslavsky    schedule 25.10.2013


Ответы (1)


Из MSDN: как прекратить использование LayoutAwarePage

В Windows 8 шаблоны Microsoft Visual Studio генерируют класс LayoutAwarePage для управления визуальными состояниями на основе ApplicationViewState. В Windows 8.1 ApplicationViewState устарел, а LayoutAwarePage больше не включается в шаблоны Visual Studio для приложений Магазина Windows. Продолжение использования LayoutAwarePage может привести к поломке вашего приложения. Чтобы исправить это, перепишите свое представление, чтобы оно соответствовало новому минимальному состоянию представления, и создайте события на основе размера окна. Если вы обновляете свое приложение до разных размеров, вы должны обработать события Window.Current и Window.SizeChanged, чтобы адаптировать пользовательский интерфейс вашего приложения к новому размеру. Мы рекомендуем прекратить использование 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 и измените метод DefineVisualState, чтобы он больше не зависел от ApplicationViewState, а зависел от размера окна. Например, вы можете вернуть VerticalLayout, если ширина окна вашего приложения меньше 500 пикселей, и HorizontalLayout, если она больше 500 пикселей. Поскольку этот метод является виртуальным, он предназначен для переопределения на каждой странице при необходимости (как это делается на SplitPage). Вы можете переопределить это на любой странице, если ваши макеты и визуальные состояния различаются. Просто не забудьте переименовать визуальные состояния на каждой из ваших страниц, чтобы они соответствовали этим новым строкам.

person Farhan Ghumra    schedule 25.10.2013
comment
Проблема в том, что если ссылка когда-нибудь пропадет (что действительно случается), то ответ бесполезен. Желательно включить здесь краткое содержание ссылки, чтобы не было необходимости переходить на другой сайт. Кстати, голос против не мой, скорее всего, он возник из обсуждения на эта метапост - person Taryn; 25.10.2013
comment
Но нет проблем, спасибо, что предложили мне включить резюме :) - person Farhan Ghumra; 25.10.2013
comment
Проблема с этой статьей MSDN заключается в том, что мы рекомендуем прекратить использование класса LayoutAwarePage и наследовать классы непосредственно от класса Page. он не учитывает, что в LayoutAwarePage есть масса другого шаблонного кода для навигации, состояния навигации и модели представления по умолчанию. - person Luke Puplett; 18.11.2014