【发布时间】:2016-10-18 16:09:50
【问题描述】:
我正在创建一个 XAML 解析器,为了与 UWP 类进行交互,我需要从代码中生成一个 DataTemplate。
我已经看到DataTemplate 类有一个LoadContent() 方法,但是我该如何使用呢?有没有办法指定必须加载哪些内容?
顺便说一句,我尝试实现IDataTemplate接口,但由于它是内部,我不得不从DataTemplate派生。
【问题讨论】:
我正在创建一个 XAML 解析器,为了与 UWP 类进行交互,我需要从代码中生成一个 DataTemplate。
我已经看到DataTemplate 类有一个LoadContent() 方法,但是我该如何使用呢?有没有办法指定必须加载哪些内容?
顺便说一句,我尝试实现IDataTemplate接口,但由于它是内部,我不得不从DataTemplate派生。
【问题讨论】:
我已经看到 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 应用为ItemTemplate 的ListView。
【讨论】:
DependencyService 来匹配每个平台。很抱歉,在这里帮不上什么忙。