【问题标题】:Is there a way to build a DataTemplate with only C#有没有办法只用 C# 构建一个 DataTemplate
【发布时间】:2018-05-28 18:11:46
【问题描述】:

有没有办法在不使用deprecatedFrameworkElementFactoryXamlReader.Load 的字符串解释方法对(related question)(another related) 编码的情况下构建DataTemplate?

DataTemplate dt = new DataTemplate();
StackPanel sp = new StackPanel();
ComboBox cellComboBox = new ComboBox() { Visibility = Visibility.Collapsed };
CheckBox cellCheckBox = new CheckBox() { Visibility = Visibility.Collapsed };

sp.Children.Add(cellComboBox);
sp.Children.Add(cellCheckBox);

// then add the stackpanel somehow?

更新:为什么? 这是一个可能需要多年支持的新程序。 XamlReader 在运行时解析具有构造函数、方法、属性的东西的字符串......感觉很笨拙。 FrameworkElementFactory 已在多个版本中被弃用,但从未有过真正的替代品。

【问题讨论】:

    标签: c# wpf datatemplate


    【解决方案1】:

    有没有办法只用 C# 构建一个 DataTemplate

    是的,您可以使用FrameworkElementFactoryXamlReader.Load 方法以编程方式创建DataTemplate

    ...不使用已弃用的FrameworkElementFactoryXamlReader.Load 方法?

    简答:没有。

    既然已经有两种方法,为什么还需要另一种方法?另请注意,如果您不想使用字符串,则可以使用 FrameworkElementFactory 类。尽管 MSDN 上的文档说了什么,但这种类型在 .NET Framework 4.7.2 中并未真正标记为过时或弃用。

    【讨论】:

      【解决方案2】:

      详细说明@mm8 的答案:不,因为如果您检查FrameworkTemplate.LoadContent 方法,您会发现模板基本上是一个包装器,它使用FrameworkElementFactoryTemplateContent 来加载内容,@ 987654325@ 是读取 XAML 节点流的实用程序。所以这是模板可以操作的仅有的两种方式。

      就个人而言,我建议使用 XAML(作为单独的 *.xaml 文件而不是 string),因为它的可读性更高,但也因为FrameworkElementFactory 的功能有限,即它只支持依赖属性和路由事件(您不能创建会设置常规 CLR 属性或事件处理程序的工厂)。不过,与 XAML 相比,它有一个优势 - 它确实支持泛型类,因此也许将两者混合使用是最合适的方法。

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多