【问题标题】:How can I convert this XAML code into C# code?如何将此 XAML 代码转换为 C# 代码?
【发布时间】:2009-03-05 22:54:26
【问题描述】:

如何将此 XAML 代码转换为 C# 代码?

<Window.Resources>
    <DataTemplate x:Key="itemtemplate">
        <TextBlock Text="{Binding Path=Text}"/>
    </DataTemplate>
</Window.Resources> 

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    试试下面的。不是命令式 WPF 专家,因此您可能需要稍微改变一下

    public void Example()
    {
        var factory = new FrameworkElementFactory(typeof(TextBlock));
        factory.SetBinding(TextBlock.TextProperty, new Binding("Text"));
    
        var dataTemplate = new DataTemplate();
        dataTemplate.VisualTree = factory;
        dataTemplate.Seal();
    }
    

    【讨论】:

    • 为什么要调用 Seal()?这解决了我在创建模板并将其绑定到 Telerik Grid 时遇到的问题,但在我发现的所有动态创建 DateTemplate 的示例中,其他人没有使用 Seal()?
    • @RalphWillgoss 自从我写这个答案已经 4 年了,我忘记了我当时打电话给Seal 的原因:(
    • 谢谢,我可能会做更多的研究,看看我能找到什么。这可能与 Telerik 控件有关。我一切正常,想知道引擎盖下发生了什么:-)
    【解决方案2】:

    从 C# 创建 DataTemplates 的正确方法是使用 XamlReader 并提供您在问题中所写的内容。

    这至少可以说是令人不快的。对不起。

    【讨论】:

      【解决方案3】:

      我刚刚查看了在线文档 - Alun 是正确的 - 使用 XamlReader。 根据 Microsoft 的说法,FrameworkElementFactory 类不支持 XAML 的所有功能,将来可能会被弃用。

      话虽如此,我已经使用 FrameworkElementFactory 即时更改 DataTemplates,并且没有任何问题。

      【讨论】:

        猜你喜欢
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 2014-03-24
        • 1970-01-01
        相关资源
        最近更新 更多