c# - ViewModel中的引用ResourceDictionary

标签 c# silverlight mvvm com resourcedictionary

我一直在尝试在我的 View 模型中加载资源字典XAML文件。我能够实例化它,并且对其调用不会导致立即错误,但是在控件返回到UI后,将弹出错误消息“从对COM组件的调用返回了错误HRESULT E_FAIL”。

我正在执行以下操作:

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

  • 调试显示VMResourcesTemplate1被分配了良好的值。我不知道为什么这会引发有关COM组件的错误,但我已将其隔离到引用此ResourceDictionary时。如果我删除引用VMResources[x]的行,则没有错误。任何帮助将非常感激。

    最佳答案

    事实证明这确实如我所描述的那样起作用,但是您不能在资源字典中的模板中指定事件。我应该已经意识到这会造成问题,但是COM却把我甩了出去。为了解决对事件处理程序的需求,我正在使用“行为”。关于行为,有大量的读物。我启动了herehere

    注意:如果有人认为我应该删除此问题,因为它确实按照建议的那样工作,请就此发表评论。我认为离开这可能会帮助某人尝试做与我相同的事情。

    关于c# - ViewModel中的引用ResourceDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077071/

    相关文章:

    c# - 在 C# 中的字符串中使用 int 数组

    c# - 如何在 WPF 应用程序中动态生成标签、按钮、复选框和文本框

    silverlight - Silverlight Toolkit Chart Line Series之颜色选择

    wpf - 在 Silverlight 中连接事件处理程序的 MVVM 方法

    .net - 使用 DataTemplate 进行动态 View 绑定(bind)

    c# - 将 ContentControl 内容与窗口内容绑定(bind)

    javascript - 从嵌套指令调用 Controller $scope 方法

    新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    c# - 将 IEnumerable 拆分为两个

    c# - 将 GridView 转换为图像