【问题标题】:Creating a DataTemplate in UWP from code从代码在 UWP 中创建 DataTemplate
【发布时间】:2016-10-18 16:09:50
【问题描述】:

我正在创建一个 XAML 解析器,为了与 UWP 类进行交互,我需要从代码中生成一个 DataTemplate

我已经看到DataTemplate 类有一个LoadContent() 方法,但是我该如何使用呢?有没有办法指定必须加载哪些内容?

顺便说一句,我尝试实现IDataTemplate接口,但由于它是内部,我不得不从DataTemplate派生。

【问题讨论】:

    标签: c# .net xaml uwp


    【解决方案1】:

    我已经看到 DataTemplate 类有一个 LoadContent() 方法,但是我该如何使用它呢?有没有办法指定必须加载哪些内容?

    您可以参考DataTemplate.LoadContent method,本文档中的示例代码展示了如何使用LoadContent 方法在运行时更改边框的外观。这是指定必须加载哪些内容的方法。

    我了解您可能希望使用 XAML 解析器在后面的代码中创建整个 DataTemplate,但不加载存在于 Resources 中的一个,然后您可以像这样编写代码:

    StringReader reader = new StringReader(
       @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
       <Ellipse Width=""300.5"" Height=""200"" Fill=""Red""/>
       </DataTemplate>");
    var template = XamlReader.Load(await reader.ReadToEndAsync());
    ListView lv = new ListView();
    lv.ItemTemplate = template as DataTemplate;
    ObservableCollection<int> coll = new ObservableCollection<int>();
    for (int i = 0; i < 20; i++)
    {
        coll.Add(i);
    }
    lv.ItemsSource = coll;
    rootGrid.Children.Add(lv);
    

    在这里,我使用XamlReader 从字符串中解析了一个DataTemplate,并将这个DataTemplate 应用为ItemTemplateListView

    【讨论】:

    • 谢谢,格蕾丝!这对 99% 的开发人员来说是可以的。对我来说,只要我想要我自己的 XAML 解析器从头开始构建数据模板就行了。我需要的是自己构建 DataTemplate。我没有使用 XamlReader,而是使用跨平台的 OmniXAML (v2)。我发现 UWP 和 WPF 存在问题,因为它们隐藏的太多以至于几乎不可能控制创建模板的整个过程。
    • @SuperJMN,是的,你是对的,我认为在 UWP 中也是不可能的。是否可以像 xamarin 一样对每个不同的平台使用本机方法?在 xamarin 中,它使用 DependencyService 来匹配每个平台。很抱歉,在这里帮不上什么忙。
    • 不,恐怕不是这样。虽然这是可能的,但我的解析器有另一种选择:在不使用任何其他解析器的情况下读取和膨胀模型。依赖另一个解析器来膨胀 DataTemplate 破坏了它的全部意义:(
    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多