6

NuGet 経由で MVVM Light パッケージを追加すると、インストール中に追加された App.xaml ファイルの行を参照するエラーが発生します。これらのエラーは、Windows Phone 8 プロジェクトでのみ表示されます。Windows Phone 7 プロジェクトでまったく同じ行を使用しても、エラーは発生しません。MVVM Light で追加された行は次のとおりです。

<ResourceDictionary>
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
     <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

これらの行は、終了</Application.Resources>タグの直前に配置されます。[エラー リスト] ペインで報告されるエラーは次のとおりです。

  • 各ディクショナリにはキーが関連付けられている必要があります
  • 「ViewModelLocator」という名前は名前空間「clr-namespace:sdkVoiceAlarmClockWP8CS.ViewModel」に存在しません

<ResourceDictionary>タグにはキー属性がないため、これは理にかなっているようです。ただし、この行のブロックを外側に移動しようとすると、ブロックすると、まったく新しい一連のエラーが発生します。

ViewModelLocator の問題に関する限り、再確認したところ、次の名前空間が属性として<Application>タグに追加され、エラーのフラグは立てられていません。

xmlns:vm="clr-namespace:sdkVoiceAlarmClockWP8CS.ViewModel" mc:Ignorable="d"

これとまったく同じ一連の行が Windows Phone 7 プロジェクトで正常に機能するのはなぜですか? また、Windows Phone 8 プロジェクトで発生している名前空間の問題を解決するにはどうすればよいですか?

これがより複雑な問題によるものである場合に備えて、App.xamlファイル全体を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<!-- 
    Copyright (c) 2012 Microsoft Corporation.  All rights reserved.
    Use of this sample source code is subject to the terms of the Microsoft license 
    agreement under which you licensed this sample source code and is provided AS-IS.
    If you did not accept the terms of the license agreement, you are not authorized 
    to use this sample source code.  For the terms of the license, please see the 
    license agreement between you and Microsoft.

    To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604
-->
<Application x:Class="AlarmClockWithVoice.App" 
             xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
             xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
             xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
             xmlns:telerikPrimitives="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Primitives" 
             xmlns:p1="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:vm="clr-namespace:sdkVoiceAlarmClockWP8CS.ViewModel" mc:Ignorable="d"
             >

    <!--Application Resources-->
    <Application.Resources>
        <Style x:Key="TransitionPageStyle" TargetType="phone:PhoneApplicationPage">
            <Setter Property="toolkit:TransitionService.NavigationInTransition">
                <Setter.Value>
                    <toolkit:NavigationInTransition>
                        <toolkit:NavigationInTransition.Backward>
                            <toolkit:TurnstileTransition Mode="BackwardIn" />
                        </toolkit:NavigationInTransition.Backward>
                        <toolkit:NavigationInTransition.Forward>
                            <toolkit:TurnstileTransition Mode="ForwardIn" />
                        </toolkit:NavigationInTransition.Forward>
                    </toolkit:NavigationInTransition>
                </Setter.Value>
            </Setter>
            <Setter Property="toolkit:TransitionService.NavigationOutTransition">
                <Setter.Value>
                    <toolkit:NavigationOutTransition>
                        <toolkit:NavigationOutTransition.Backward>
                            <toolkit:TurnstileTransition Mode="BackwardOut" />
                        </toolkit:NavigationOutTransition.Backward>
                        <toolkit:NavigationOutTransition.Forward>
                            <toolkit:TurnstileTransition Mode="ForwardOut" />
                        </toolkit:NavigationOutTransition.Forward>
                    </toolkit:NavigationOutTransition>
                </Setter.Value>
            </Setter>
        </Style>
        <ResourceDictionary>
            <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
            <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

    <Application.ApplicationLifetimeObjects>
        <!--Required object that handles lifetime events for the application-->
        <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated" />
    </Application.ApplicationLifetimeObjects>

</Application>
4

2 に答える 2

2

以前にこの問題がありました。WP8 で動作させるには、これを置き換えます。

<ResourceDictionary>
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
    <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

これだけで:

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

しかし、WP7では機能するのにWP8では機能しない理由については気にしませんでした

于 2013-05-13T02:59:10.760 に答える
0

このstackoverflow questionで既に述べたように、すべての必要な名前空間を含む ApplicationResources ではなく、ResourceDictionary にすべてを挿入します。

于 2014-06-12T06:26:09.040 に答える