2014-11-17 36 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

相关问题