2017-01-14 7 views
0

MainWindowビューで使用するMainMenuユーザーコントロールがあります。 MainMenuマークアップは次のように始まります:デザインモードでWPF UserControlとそのオーナーウィンドウにビルドエラーが発生するのはなぜですか?

<UserControl x:Class="ApptEase.Client.Shell.Controls.MainMenu" 
      .... 
      d:DesignHeight="25"> 
    <UserControl.DataContext> 
     <shell:MainWindowViewModel /> 
    </UserControl.DataContext> 
    <Menu Height="25" VerticalAlignment="Top"> 
     <MenuItem Header="_File"> 

私は私のエラー一覧に2のエラーを取得し、両方のは、次のとおりです。

を入力するタイプ「System.Windows.Application」のオブジェクトをキャストすることができません " ApptEase.Client.App '

最初は、上記のユーザーコントロールマークアップの<shell:MainWindowViewModel />行にあります。 2番目はMainWindowのマークアップの抜粋の<shell:MainMenu Grid.Row="0" />行にあります。

メインウィンドウの抜粋:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <shell:MainMenu Grid.Row="0" /> 
    <ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" /> 
</Grid> 

MainWindowViewModelBaseViewModelから派生:

public abstract class BaseViewModel : BindableBase 
{ 
    protected BaseViewModel() 
    { 
     AppState = ((App)Application.Current).AppState; 
    } 
    ... 
} 

私は((App)Application.Current).AppState行をコメントアウトした場合、エラーが消えます。しかし、ビルド時に出力ウィンドウに「成功ビルド」以外の出力は表示されず、アプリは正常に起動します。すなわち、BaseViewModel ctorは例外なく正常に実行されます。

私はオプションがないが、エラーメッセージを受け入れることが無害である場合、それらを抑制する方法はありますか?私はXAMLマークアップで動作するコンパイラ指令を見ていません。

+0

完全な例を(おそらくアーカイブとして)提供できますか?私はプリズムに慣れていませんが、これはApp.xaml/App.xaml.csの問題のようです。 – cdmnk

+0

@cdmnk Prism Unityプロジェクトテンプレートに基づいて2つの簡単な追加だけで新しいプロジェクトを作成しましたが、基本的なアプリケーションメインウィンドウを表示するのにUnityを使用しているだけです。ビルドを行うとエラーが表示されます。ここに私のGoogleドライブへのリンクがあります:https://drive.google.com/file/d/0BzxhSNxuhN5OUEV1RG1PWGtualk/view?usp=sharing – ProfK

+0

@cdmnk私はそれが設計時に '行末に何かあるかもしれないと思う。 Current'はタイプ 'App'ではなく、実行時にのみです。 – ProfK

答えて

0

これは単なる「キャッチオール」や適切な解決策である場合、私は知らないが、私はのように見えるために私BaseViewModel CTORを変更することで、私の問題を解決した:

protected BaseViewModel() 
{ 
    if (!DesignerProperties.GetIsInDesignMode(new DependencyObject())) 
    { 
     _app = (App)Application.Current; 
    } 
} 

それがでているようですデザインモードでApplication.CurrentAppではありません。

関連する問題