Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ViewModel引用ResourceDictionary_C#_Silverlight_Mvvm_Com_Resourcedictionary - Fatal编程技术网

C# 从ViewModel引用ResourceDictionary

C# 从ViewModel引用ResourceDictionary,c#,silverlight,mvvm,com,resourcedictionary,C#,Silverlight,Mvvm,Com,Resourcedictionary,我一直在尝试在我的视图模型中加载一个资源字典XAML文件。我能够实例化它,对它的调用不会立即导致错误,但在控制返回到UI后,会出现一个错误弹出窗口“error HRESULT E_FAIL已从对COM组件的调用返回” 我正在做以下工作: ResourceDictionary文件是ViewModelsResources.xaml位于MyApp/ViewModels中,其中MyApp是我的Silverlight应用程序的根文件夹 ResourceDictionary VMResources = n

我一直在尝试在我的视图模型中加载一个资源字典XAML文件。我能够实例化它,对它的调用不会立即导致错误,但在控制返回到UI后,会出现一个错误弹出窗口“error HRESULT E_FAIL已从对COM组件的调用返回”

我正在做以下工作:

  • ResourceDictionary文件是
    ViewModelsResources.xaml
    位于
    MyApp/ViewModels
    中,其中
    MyApp
    是我的Silverlight应用程序的根文件夹
  • ResourceDictionary VMResources = new ResourceDictionary()
    {
        Source = new Uri("/ViewModels/ViewModelsResources.xaml", UriKind.Relative)
    };
  • ViewModelsResources.xaml
    标记为生成操作:
    Content
    ,复制到输出目录:
    Copy always
    ,自定义工具:
    MSBuild:Compile
  • ResourceDictionary对象实例化为(此代码与资源字典文件位于同一文件夹中的类中)
    ResourceDictionary VMResources = new ResourceDictionary()
    {
        Source = new Uri("/ViewModels/ViewModelsResources.xaml", UriKind.Relative)
    };
  • 然后通过索引引用对象,索引基于x:Key值:
    Template1=VMResources[“myTemplate”]作为ControlTemplate(与上面的代码示例相同)

调试表明
VMResources
Template1
被分配了良好的值。我不知道这为什么会抛出有关COM组件的错误,但我已经将其隔离到引用此ResourceDictionary时。如果我取出引用
VMResources[x]
的行,则没有错误。任何帮助都将不胜感激。

事实证明,这确实如我所描述的那样有效,但您不能在资源字典中找到的模板中指定事件。我应该意识到这会引起问题,但COM却把我甩了。为了避免对事件处理程序的需求,我使用了行为。有很多关于行为的阅读。我开始和他交谈


注意:如果有人认为我应该删除这个问题,因为它实际上是按照建议的那样工作的,那么就这样评论吧。我想,保留此选项可能有助于尝试做与我相同的事情。

结果表明,此选项确实如我所述有效,但您不能在资源字典中找到的模板中指定事件。我应该意识到这会引起问题,但COM却把我甩了。为了避免对事件处理程序的需求,我使用了行为。有很多关于行为的阅读。我开始和他交谈

注意:如果有人认为我应该删除这个问题,因为它实际上是按照建议的那样工作的,那么就这样评论吧。我想离开这个可能会帮助那些想和我做同样事情的人