2013-10-25 27 views
9

Zaktualizowałem mój projekt do Windows 8.1 z Windows 8.0 i otrzymałem ostrzeżenia o przestarzałych kodach. Niektóre z nich mam naprawione, a niektóre nie.Windows 8.1 Jak naprawić ten nieaktualny kod?

Oto obraz ostatnich ostrzeżeń, których nie mogłem naprawić i nie mogłem znaleźć żadnych informacji.

enter image description here

Wszystkie ostrzeżenia odnosi się do tej samej metody, a ona mówi, że jest przestarzały, co należy zrobić, aby uzyskać nie przestarzałego kodu?

Oto kody:

  1. numer ostrzeżenie 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. liczba Ostrzeżenie 1.

    // Set the initial visual state of the control 
    VisualStateManager.GoToState(control, DetermineVisualState(ApplicationView.Value), false); 
    
  3. liczba Ostrzeżenie 3.

    string visualState = DetermineVisualState(ApplicationView.Value); 
    

Wszystkie powyższe kody, wywołania metody DetermineVisualState, która jest przestarzała, oferuje zapytanie o rozmiary układu okna bezpośrednio, ale co to znaczy?

Uwaga: Jest to LayoutAwarePage, więc nie napisałem tutaj żadnego kodu, jest to implementacja systemu Windows 8.0.

Każda pomoc zostanie doceniona i z góry dziękujemy!

+0

Widziałeś [ten przykład w systemie Windows 8.1] (http://code.msdn.microsoft.com/windowsapps/Controlling-the-VisualState-d169aeb8)? Jakaś pomoc? –

+0

Tak, to jest pierwszy przykład, który widziałem, bez pomocy, ponieważ nie używa on LayoutAwarePage –

+1

Zgadza się - jak to mówi * "W systemie Windows 8.1 podgląd LayoutAwarePage został usunięty z domyślnych szablonów aplikacji Windows Store" * - więc artykuł daje możliwa alternatywa. Czy to nie jest możliwe? –

Odpowiedz

8

Od MSDN: How to stop using the LayoutAwarePage

W Windows 8, Microsoft Visual Studio szablony wygenerować klasę LayoutAwarePage zarządzać stany wizualnych opartych na ApplicationViewState. W systemie Windows 8.1 aplikacja ApplicationViewState ma numer uznany za przestarzały, a element LayoutAwarePage nie jest już uwzględniony w szablonach aplikacji Visual Studio dla aplikacji Sklepu systemu Windows. Kontynuowanie korzystania z LayoutAwarePage może spowodować uszkodzenie aplikacji. Aby to naprawić, przepisuj swój widok na , dostosowując nowy minimalny stan widoku i twórz zdarzenia na podstawie rozmiaru okna . Jeśli zaktualizujesz aplikację do różnych rozmiarów, musisz obsługiwać zdarzenia Window.Current i Window.SizeChanged, aby dostosować interfejs użytkownika aplikacji do nowego rozmiaru. Zalecamy zaprzestanie korzystania z LayoutAwarePage i dziedziczenie klas bezpośrednio z klasy Page. Oto jak zatrzymać przy użyciu 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

Otwarte LayoutAwarePage i zmienić metodę DetermineVisualState aby nie dłużej polegać na ApplicationViewState i zamiast być zależne od rozmiar okna.Na przykład możesz zwrócić VerticalLayout, gdy szerokość okna aplikacji jest mniejsza niż 500 pikseli, a wartość HorizontalLayout, gdy jest większa niż 500 pikseli. Ponieważ ta metoda jest wirtualna, jest przeznaczona do zastąpienia na każdej stronie w razie potrzeby (tak jak jest to robione na jednostce SplitPage ). Możesz zmienić to na dowolnej stronie, jeśli Twoje układy i stany wizualne różnią się. Po prostu upewnij się, że nazwy wizualne na są zmieniane na każdej z Twoich stron, aby pasowały do ​​nowych napisów.

+0

Problem polega na tym, że link kiedykolwiek umiera (co się dzieje), wtedy odpowiedź jest bezużyteczna. Najlepiej jest umieścić podsumowanie linku, aby nie trzeba było wchodzić na inną stronę. BTW downwote nie jest moje, najprawdopodobniej pochodziło z dyskusji na [ten meta post] (http://meta.stackexchange.com/questions/202974/when-is-it-wrong-to-flag--link -only-answer) – Taryn

+2

Nie ma problemu, dziękuję za sugestię, bym zawierał podsumowanie :) – Xyroid

+1

Problem z tym artykułem MSDN polega na tym, że mówi: "Zalecamy przerwanie korzystania z klasy LayoutAwarePage i dziedziczenie klas bezpośrednio z klasy Strona . " nie bierze pod uwagę, że jest mnóstwo innych kodów szablonu w LayoutAwarePage dla nawigacji, stanu nawigacji i domyślnego modelu widoku. –

Powiązane problemy