Metro/Windows8 编译错误:LoadState() => 找不到合适的方法来覆盖

本文关键字:找不到 覆盖 方法 编译 Windows8 错误 LoadState Metro | 更新日期: 2023-09-27 18:36:08

我正在尝试在MSVS 11 Beta上使用Windows 8社区预览版通过Metro"Hello World"工作:

使用 C# 或 VB 创建你的第一个 Metro 风格应用

本教程要求您创建一些"模板"页面。 例如:

public sealed partial class SplitPage : WindowsBlogReader.Common.LayoutAwarePage
{
   ...

本教程还要求您重写其中一些页面的 LoadState() 方法:

    protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
    {
        // TODO: Assign a bindable group to this.DefaultViewModel["Group"]
        // TODO: Assign a collection of bindable items to this.DefaultViewModel["Items"]
        FeedData feedData = navigationParameter as FeedData;        
        if (feedData != null)
        {
            this.DefaultViewModel["Feed"] = feedData;
            this.DefaultViewModel["Items"] = feedData.Items;
        }
        ...

问题是这会因一个令人讨厌的编译错误而死亡:

LoadState(object,System.Collections.Generic.Dictionary<string,object>): no suitable method found to override.

自动生成的模板代码中没有"页面状态管理"区域和默认的"LoadState()"方法(SplitPage.xaml.cs);教程说应该有。

问:LoadState() 现在是否在较新版本的 Metro SDK 中被弃用?

问:我是否需要在 .xaml 文件中执行一些"神奇"操作才能完成此操作?

问:这到底是怎么回事?

非常感谢

你,如果有人有任何建议!教程还要求您覆盖其中一些页面的 LoadState() 方法:

Metro/Windows8 编译错误:LoadState() => 找不到合适的方法来覆盖

我也遇到了同样的问题,后来我在 SplitPage.xaml 的方法 OnNavigatedTo() 中使用相同的代码.cs如下所示,它工作正常。

    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.  The
    /// Parameter property provides the group to be displayed.</param>
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // TODO: Assign a bindable group to this.DefaultViewModel["Group"]
        // TODO: Assign a collection of bindable items to this.DefaultViewModel["Items"]
        FeedData feedData = e.Parameter  as FeedData;
        if (feedData != null)
        {
            this.DefaultViewModel["Feed"] = feedData;
            this.DefaultViewModel["Items"] = feedData.Items;
        }

        // Select the first item automatically unless logical page navigation is
        // being used (see the logical page navigation #region below.)
        if (!this.UsingLogicalPageNavigation()) this.itemsViewSource.View.MoveCurrentToFirst();
    }

做的一个小更改是我使用了 e.Parameter 而不是 navigationParameter 。

您是否移植了旧的 Metro 应用程序,忘记更新 Common 文件夹中的 LayOutAware 页面?