【问题标题】:WinRT hierarchical data displayingWinRT 分层数据显示
【发布时间】:2012-12-26 22:50:47
【问题描述】:

我需要显示分层数据,例如:

public class Element
{
    public string Name { get; private set; }
    public Element[] Elements { get; private set; }
}

对于每个元素,它只是带有矩形(Name)的垂直面板。如果单击元素,则其子元素将显示在其下方(元素已展开)。如果其中一个被点击,它的元素就会出现,依此类推。

我已经用谷歌搜索过了,发现 WinRT 中没有 HierarchicalDataTemplate 和树视图。
所以我开始自己做。
我为它创建了ItemsControlDataTemplate DataTemplate1。在DataTemplate1 中,我还创建ItemsControl 并将DataTemplate2 设置为ItemTemplate。在DataTemplate2ItemTemplateDataTemplate3 等等。最后一个DataTemplate 没有ItemsControl

在按钮Click 事件中,我更改DataModel(即Element[])中任何元素的Elements IsVisible 属性,因此可以轻松执行任何自定义逻辑来展开/折叠元素。

<DataTemplate x:Key="DataTemplate2">
    <StackPanel Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}">
        <Button  Style="{StaticResource ItemButtonStyle}"
                 Click="MenuElement_Click">
            <TextBlock Style="{StaticResource ItemTextBlockStyle}" Text="{Binding Name}"/>
        </Button>
        <ItemsControl ItemsSource="{Binding Elements}" ItemTemplate="{StaticResource DataTemplate3}"/>
    </StackPanel>
</DataTemplate>

<DataTemplate x:Key="DataTemplate1">
    <StackPanel Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}">
        <Button  Style="{StaticResource ItemButtonStyle}"
                 Click="MenuElement_Click">
            <TextBlock Style="{StaticResource ItemTextBlockStyle}" Text="{Binding Name}"/>
        </Button>
        <ItemsControl ItemsSource="{Binding Elements}" ItemTemplate="{StaticResource DataTemplate2}"/>
    </StackPanel>
</DataTemplate>

它工作正常,但问题是如果我想启用 10 级层次结构,我必须复制过去 10 个数据模板。 11级仍然不可用。

我还尝试在 C# 中创建 DataTemplate 并以递归方法手动为其 ItemSource 应用 DataTemplate 等等。
但是我发现了2个问题。

  1. 我实际上不知道如何在 Metro (C#) 中创建 DataTemplate,因为它没有 VisualTree 属性。我只能做(var dt= new Datatemplate();),不知道怎么改。

  2. 如果我从 XAML 中读取 DataTemplate (var dateTemplateRoot = (DataTemplate)this.Resources["DataTemplate1"];)

我仍然无法在其中找到ItemsControl 并更改其DataTemplate
实际上,我可以使用var content = dateTemplateRoot.LoadContent();,然后通过VisualTreeHelper 找到ItemsControl,但之后我不能使用DataTemplate 的内容(内容类型为DependencyObject)。

所以,实际上我有 2 个问题。
通过“绑定”所有项目并仅切换 Visibility 属性来执行分层下拉列表是否是一种好方法?
第二个是——如何实现无限层级的分层嵌套?

【问题讨论】:

  • 查看 Silverlight 3 的 Silverlight 工具包 - SL3 中没有 HierarchicalDataTemplate,但该工具包提供了一个和 TreeView。

标签: c# xaml windows-runtime hierarchical


【解决方案1】:

WinRT XAML Toolkit 现在有一个TreeView 控件。看看吧:http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/b0ee76bd6492#WinRTXamlToolkit/Controls/TreeView/TreeView.cs

但请注意 - 这只是 Silverlight Toolkit 的一个粗略移植,可能效果不佳。此外,如果您计划将其作为 Windows 应用商店应用程序的一部分发布 - 您将需要对其进行大量重新设计,除非您的应用程序仅适用于桌面,因为它不是很适合触控。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多