c# – 在代码中将DataTemplate(非XAML)添加到资源字典中?

我正在试图弄清楚如何将DataTemplate添加到应用程序的资源字典中.当DataTemplate在XAML中时(通过uri),我很熟悉如何这样做,但是当我在代码中定义DataTemplate时,我对如何做到这一点很模糊.

我所拥有的,不起作用的是 –

        //Create DataTemplate
        DataTemplate template = new DataTemplate(typeof(CoordinateViewModel));
        FrameworkElementFactory ViewStack = new FrameworkElementFactory(typeof(CoordinateView));
        ViewStack.Name = "myViewStack";

        template.VisualTree = ViewStack;


        ResourceDictionary dictionary = new ResourceDictionary();
        dictionary.BeginInit();
        dictionary.Add(template, template);
        dictionary.EndInit();

        App.Current.Resources.MergedDictionaries.Add(dictionary);

编辑:尽管没有丢失任何错误,DataTemplate尽可能不进入App的资源字典.稍后从XAML调用ViewModel时,它就好像没有适当的DataTemplate来显示它.例如,

<StackPanel>
    <ContentPresenter Content="{Binding ViewModel}" />
</StackPanel>

结果在一个空窗口中显示文本“ShellPrototype.ViewModels.CoordinateViewModel” – EG,它没有显示视图的模板.

最佳答案 为了使这项工作正常,这里的关键是使用
DataTemplateKey

ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Add(new DataTemplateKey(typeof(CoordinateViewModel)), template);

如果这样做,它应该按照指定的方式工作.但是,根据文档,FrameworkElementFactory是“以编程方式创建模板的一种不赞成的方式”,因此您可能希望直接解析XAML.

点赞