在win8中创建DataTemplate

时间:2012-08-23 10:49:03

标签: c# windows-8 .net-4.5

如何使用代码隐藏文件在win8(WinRT)App中创建DataTemplate,即使用C#而不是xaml。

1 个答案:

答案 0 :(得分:4)

如果您想根据所显示的内容创建模板,我可以看到为什么这可能有用。 使这项工作的关键是Windows.UI.Xaml.Markup.XamlReader.Load()。它需要一个包含数据模板的字符串,并将其解析为DataTemplate对象。然后,您可以将该对象分配到您想要使用它的任何位置。在下面的示例中,我将其分配给ListView的ItemTemplate字段。

以下是一些XAML:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <ListView x:Name="MyListView"/>
</Grid>

以下是创建DataTemplate的代码隐藏:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var items = new List<MyItem>
        {
            new MyItem { Foo = "Hello", Bar = "World" },
            new MyItem { Foo = "Just an", Bar = "Example" }
        };
        MyListView.ItemsSource = items;

        var str = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
                "<Border Background=\"Blue\" BorderBrush=\"Green\" BorderThickness=\"2\">" +
                    "<StackPanel Orientation=\"Vertical\">" +
                        "<TextBlock Text=\"{Binding Foo}\"/>" +
                        "<TextBlock Text=\"{Binding Bar}\"/>" +
                    "</StackPanel>" +
                "</Border>" +
            "</DataTemplate>";
        DataTemplate template = (DataTemplate)Windows.UI.Xaml.Markup.XamlReader.Load(str);
        MyListView.ItemTemplate = template;
    }
}

public class MyItem
{
    public string Foo { get; set; }
    public string Bar { get; set; }
}