2013-10-25 30 views
9

Tôi đã nâng cấp dự án của mình lên cửa sổ 8.1 từ windows 8.0 và nhận được một số cảnh báo về các mã lỗi thời. Một số người trong số họ tôi đã cố định, và một số người trong số họ thì không.Windows 8.1 Cách khắc phục mã lỗi thời này?

Dưới đây là hình ảnh về các cảnh báo cuối cùng mà tôi không thể khắc phục và không thể tìm thấy bất kỳ thông tin nào.

enter image description here

Tất cả các cảnh báo đề cập đến cùng một phương pháp, và nó nói rằng đó là lỗi thời, những gì tôi nên làm gì để lấy mã không lỗi thời?

Dưới đây là các mã:

  1. số cảnh báo 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. số Warning 1.

    // Set the initial visual state of the control 
    VisualStateManager.GoToState(control, DetermineVisualState(ApplicationView.Value), false); 
    
  3. số Warning 3.

    string visualState = DetermineVisualState(ApplicationView.Value); 
    

Tất cả các mã ở trên, gọi đến phương pháp xác định kích thước cửa sổ không được chấp nhận, nó cung cấp truy vấn trực tiếp kích thước bố cục cửa sổ, nhưng ý nghĩa của nó là gì?

Lưu ý: Đây là LayoutAwarePage, vì vậy tôi chưa viết ở đây bất kỳ mã nào, đây là bản cài đặt Windows 8.0.

Mọi trợ giúp sẽ được đánh giá cao và cảm ơn trước!

+0

Bạn đã xem [ví dụ về Windows 8.1] này chưa (http://code.msdn.microsoft.com/windowsapps/Controlling-the-VisualState-d169aeb8)? Bất kỳ giúp đỡ? –

+0

Vâng, đây là ví dụ đầu tiên tôi thấy, không có trợ giúp vì nó không sử dụng LayoutAwarePage –

+1

Đúng vậy - như nó nói * "Với bản xem trước Windows 8.1, LayoutAwarePage bị loại bỏ khỏi các mẫu ứng dụng Windows Store mặc định" * - có thể thay thế. Đó có phải là không thể cho bạn? –

Trả lời

8

Từ MSDN: How to stop using the LayoutAwarePage

Trong Windows 8, Microsoft Visual Studio mẫu tạo ra các lớp LayoutAwarePage để quản lý các trạng thái trực quan dựa trên ApplicationViewState. Trong Windows 8.1, ApplicationViewState bị không được dùng nữa và LayoutAwarePage không còn được bao gồm trong các mẫu Visual Studio cho ứng dụng Windows Store. Tiếp tục sử dụng LayoutAwarePage có thể phá vỡ ứng dụng của bạn. Để khắc phục điều này, hãy viết lại chế độ xem của bạn thành phù hợp với trạng thái chế độ xem tối thiểu mới và tạo sự kiện dựa trên kích thước cửa sổ . Nếu bạn cập nhật ứng dụng của mình lên các kích thước khác nhau, bạn phải xử lý các sự kiện Window.Current và Window.SizeChanged để điều chỉnh giao diện người dùng của ứng dụng của bạn với kích thước mới là . Chúng tôi khuyên bạn nên ngừng sử dụng LayoutAwarePage và kế thừa các lớp trực tiếp từ lớp Trang. Dưới đây là làm thế nào để ngừng sử dụng 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

mở LayoutAwarePage và thay đổi phương pháp DetermineVisualState để không còn dựa vào ApplicationViewState và thay vào đó là phụ thuộc vào kích thước cửa sổ.Ví dụ: bạn có thể trả lại VerticalLayout khi chiều rộng cửa sổ ứng dụng của bạn nhỏ hơn 500px và HorizontalLayout khi lớn hơn 500px. Vì phương pháp này là ảo, nó được thiết kế để được ghi đè trong mỗi trang khi cần thiết (khi được thực hiện trên SplitPage). Bạn có thể ghi đè điều này trên bất kỳ trang nào nếu bố cục của bạn và các trạng thái trực quan khác nhau. Chỉ cần đảm bảo đổi tên các trạng thái trực quan trên mỗi trang của bạn để phù hợp với các chuỗi mới này.

+0

Vấn đề là nếu liên kết bao giờ chết (điều gì xảy ra) thì câu trả lời là vô dụng. Tốt nhất nên bao gồm một bản tóm tắt liên kết ở đây để không cần phải đi đến một trang web khác. BTW downvote không phải của tôi, nó rất có thể đến từ các cuộc thảo luận về [bài meta này] (http://meta.stackexchange.com/questions/202974/when-is-it-wrong-to-flag-a-link -only-answer) – Taryn

+2

Không có vấn đề gì, cảm ơn vì đã đề nghị tôi đưa vào tóm tắt :) – Xyroid

+1

Vấn đề với bài viết MSDN đó là nói rằng "Chúng tôi khuyên bạn nên ngừng sử dụng lớp LayoutAwarePage và kế thừa các lớp trực tiếp từ lớp Page . " nó bỏ qua để xem xét rằng có một tấn mã mẫu khác trong LayoutAwarePage để điều hướng, trạng thái điều hướng và kiểu xem mặc định. –

Các vấn đề liên quan