2014-11-17 41 views
0

我遇到了這個錯誤,我找不到解決方案。我執行的MVVM應用程序,在主窗口中我使用的是裝載機設置主的DataContext在XAML:在App.xaml中 :App.OnExit在添加ResourceDirectory時找不到合適的方法覆蓋

<Application.Resources> 
     <viewModel:KinectViewModelLoader x:Key="KinectViewModelLoader"/> 
</Application.Resources> 

在MainWindow.xaml:

<Window x:Class="KinectFittingRoom.MainWindow" 
... 
     DataContext="{Binding KinectViewModel, Source={StaticResource KinectViewModelLoader}}"> 
... 
</Window> 

一切運行良好,但現在我想添加一些動態資源,所以我創建了一些包含樣式和其他元素的xaml文件。 在例如:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ModelUIElement3D x:Key="BirthdayHatModel"> 
... 
    </ModelUIElement3D> 
</ResourceDictionary > 

要MainWindow.xaml使用他們,我已經添加了他們的App.xaml文件ResourceDirectory然後我的應用程序開始崩潰。

的App.xaml:

<Application x:Class="KinectFittingRoom.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:viewModel="clr-namespace:KinectFittingRoom.ViewModel" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <viewModel:KinectViewModelLoader x:Key="KinectViewModelLoader"/> 
     <ResourceDictionary x:Key="ResourceDictionary"> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Styles/GlassButton.xaml"/> 
       <ResourceDictionary Source="Resources/Models/BirthdayHat.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

現在我在App.xaml.cs文件中獲取一個錯誤,指出KinectFittingRoom.App.OnExit(System.Windows.ExitEventArgs)沒有合適的方法來覆蓋。

我的覆蓋方法:爲什麼加入ResourceDirectory節點會導致我的應用程序拋出異常

protected override void OnExit(ExitEventArgs e) 
{ 
    KinectViewModelLoader.Cleanup(); 
    base.OnExit(e); 
} 

馬貝有人可以給我解釋一下嗎?我能做些什麼來包括這些資源並避免這些問題?我將不勝感激任何建議。

回答

1

我認爲你需要改變你的XAML兩件事情:

  1. 在你App.xaml文件移到您的視圖模型的ResourceDictionary部分內的聲明。另外如果可能的話,你應該刪除x:Key =「ResourceDictionary」。所以,現在你的App.xaml應該是這樣的:

    <Application x:Class..................> 
        <Application.Resources> 
         <ResourceDictionary> 
          <viewModel:KinectViewModelLoader x:Key="KinectViewModelLoader"/> 
          <ResourceDictionary.MergedDictionaries> 
           <ResourceDictionary Source="Resources/Styles/GlassButton.xaml"/> 
           <ResourceDictionary Source="Resources/Models/BirthdayHat.xaml"/> 
          </ResourceDictionary.MergedDictionaries> 
         </ResourceDictionary> 
        </Application.Resources> 
    </Application> 
    
  2. 如果按照以上步驟之後,你的程序不工作,那麼請跟着這一步。改變你的窗前,彷彿是代碼的DataContext屬性如下圖所示:

    <Window x:Class="KinectFittingRoom.MainWindow" 
         DataContext="{StaticResource KinectViewModelLoader}"> 
        ... 
    </Window> 
    
  3. 如果仍然您的應用程序不工作,那麼改變App.OnExit線的順序()如下:

    protected override void OnExit(ExitEventArgs e) 
    { 
        base.OnExit(e); 
        KinectViewModelLoader.Cleanup(); 
    } 
    
+0

第一步爲我工作。我刪除了x:Key屬性,並在ResourceDictionary中移動了加載器節點。你能告訴我嗎,在''默認創建字典裏只放一個節點? – monkog

相關問題