1

VS2013 RC を使用して Caliburn.Micro WinRT 8.1 アプリで設定ビューを開こうとしていますが、開くとハンドルされない例外が発生し続け、次のメッセージが表示されます。

値を null にすることはできません。パラメーター名: アプリ マニフェストから VisualElements を解析できませんでした。

次の手順で問題を再現できます。

  1. 空のアプリ テンプレートを使用して、VS2013 RC から新しい Windows ストア アプリを作成します。
  2. NuGet 経由で Caliburn.Micro を追加します。
  3. App.xaml で、基本クラスを caliburn:CaliburnApplication に変更します (名前空間は xmlns:caliburn="using:Caliburn.Micro" として宣言されています)。
  4. App.xaml.cs で、クラスを次のように変更します (CM ベースの設定については、http://compiledexperience.com/blog/posts/settings-caliburnに従います) 。

以下のコード:

public sealed partial class App 
{
  private WinRTContainer _container;    

  public App()
  {
      InitializeComponent();
  }

  protected override void Configure()
  {
      _container = new WinRTContainer();
      _container.RegisterWinRTServices();

      _container.PerRequest<MainViewModel>();
      _container.PerRequest<SettingsViewModel>();

      ISettingsService settings = _container.RegisterSettingsService();
      settings.RegisterCommand<SettingsViewModel>("Test settings");
  }

  protected override object GetInstance(Type service, string key)
  {
      var instance = _container.GetInstance(service, key);
      if (instance != null) return instance;
      throw new Exception("Could not locate any instances.");
  }

  protected override IEnumerable<object> GetAllInstances(Type service)
  {
      return _container.GetAllInstances(service);
  }

  protected override void BuildUp(object instance)
  {
      _container.BuildUp(instance);
  }

  protected override void PrepareViewFirst(Frame rootFrame)
  {
    _container.RegisterNavigationService(rootFrame);
  }

  protected override void OnLaunched(LaunchActivatedEventArgs args)
  {
    DisplayRootView<MainView>();
  }
}
  1. 最後に、ソリューションに Views と ViewModels のフォルダーを作成し、それらに必要なアイテムを追加します: MainViewModel、SettingsViewModel、MainView、SettingsView。ビューには、テキストを含む TextBlock が含まれているだけです。MainViewModel は Screen から派生し、SettingsViewModel は PropertyChangedBase から派生します。それらのいずれにも関連するコードはありません。

アプリを起動すると、メイン ビューが表示されます。次に、チャーム バーを開いて設定をクリックすると、アプリの設定につながるラベルが見つかります。クリックすると、上記の例外が発生します。ヒントはありますか?

ここで完全な再現ソリューションを見つけることができます: http://sdrv.ms/18GIMvB

4

2 に答える 2

0

CM のアルファ版に移行する準備ができていない場合は、NuGet を介して Callisto を 1.4.0 に更新できます。それは私のためにエラーを修正しました。

于 2014-02-28T15:24:26.393 に答える
0

新しい CM リリース (アルファ 2) で問題が修正されたようです。そのため、私のような他の新規参入者を支援するために、ここにさらに情報を追加します。これが私が今していることです:

アプリConfigureには、次のようなブートストラップ コードがあります。

...
ResourceLoader loader = ResourceLoader.GetForViewIndependentUse("Resources");
ISettingsService settings = _container.RegisterSettingsService();
settings.RegisterFlyoutCommand<ContentSettingsViewModel>(loader.GetString("SettingsContent"));

一部のContentSettingsViewModelコンテンツをフィルタリングするためのビューモデルです。リソースから取得した文字列は、設定フライアウトに表示されるラベルです (空または null 文字列を渡すと例外がトリガーされるため、この文字列のエントリがあることを確認してください)。この VM は CM から派生したもので、ユーザーが設定ページを開いたり閉じたりしたときに設定をScreen上書きOnActivateして保存します。OnDeactivate

于 2014-03-02T13:33:09.970 に答える