gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:37:07 25 4
gpt4 key购买 nike

我正在尝试了解如何将 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 没有进入应用程序的资源字典,尽管没有抛出任何错误。当稍后从 XAML 调用 ViewModel 时,它的行为就好像没有合适的 DataTemplate 来显示它一样。例如,

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

导致显示文本“ShellPrototype.ViewModels.CoordinateViewModel”的空窗口 - 例如,它没有显示 View 的模板。

最佳答案

这里的关键,为了使它正常工作,是使用 DataTemplateKey :

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

如果您这样做,它应该会按规定工作。然而,FrameworkElementFactory根据文档,这是“一种以编程方式创建模板的已弃用方式”,因此您可能希望直接解析 XAML。

关于c# - 在代码中将 DataTemplate(非 XAML)添加到资源字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com