顯示

2013-01-12 52 views
1

我需要顯示等分層數據的WinRT分層數據:顯示

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

這將是對於每個元件只是垂直板與矩形(帶Name)。如果單擊元素,它的子元素顯示在它下面(元素被展開)。如果其中一個被點擊,它的元素出現等等。

我已經使用了這個,發現在WinRT中沒有HierarchicalDataTemplate和沒有樹視圖。
所以我開始自己做。
我爲它創建了ItemsControlDataTemplateDataTemplate1。在DataTemplate1我也創建ItemsControl並將DataTemplate2設置爲ItemTemplate。在DataTemplate2ItemTemplateDataTemplate3等。最後的DataTemplate沒有ItemsControl

在按鈕Click事件更改元素IsVisible屬性用於DataModel的任何元件(即Element[]),所以很容易執行任何定製邏輯展開/摺疊的元件。

<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層次的層次結構,我必須copypast 10數據模板。 11級仍然無法使用。

我還嘗試在C#中創建DataTemplate,並在遞歸方法中手動爲其ItemSource等應用DataTemplate
但我發現2個問題。

  1. 我真的不知道如何在地鐵(C#)DataTemplate,因爲它沒有VisualTree財產。我只能做(var dt= new Datatemplate();),我不知道如何改變它。

  2. 如果我從XAML(var dateTemplateRoot = (DataTemplate)this.Resources["DataTemplate1"];

閱讀DataTemplate我仍然無法找到它ItemsControl並改變其DataTemplate。其實,我可以使用var content = dateTemplateRoot.LoadContent();,然後通過VisualTreeHelper找到ItemsControl,但是我不能使用內容之後的內容作爲DataTemplate(內容的類型爲DependencyObject)。

所以,其實我有2個問題。
通過「綁定」所有項目並僅切換Visibility屬性來執行分層下拉列表是否是一種好方法?
第二個是 - 如何啓用無限級別的嵌套層次?

+0

查看Silverlight 3的Silverlight工具包 - SL3中沒有HierarchicalDataTemplate,但工具包提供了一個和TreeView。 –

回答

0

WinRT XAML工具包現在有一個TreeView控件。檢查出來:http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/b0ee76bd6492#WinRTXamlToolkit/Controls/TreeView/TreeView.cs

但要小心 - 這只是Silverlight Toolkit的一個粗略的端口,可能無法很好地工作。此外,如果您計劃將其作爲Windows應用商店應用的一部分發布 - 您需要重新對其進行重新設置,除非您的應用只支持桌面,因爲它不是非常友好。