1

次のような階層データを表示する必要があります。

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

Name各要素に長方形( )が付いた垂直パネルになります。要素をクリックすると、その子要素がその下に表示されます (要素が展開されます)。それらのいずれかをクリックすると、その要素が表示されます。

私はすでにこれをグーグルで検索しましたが、WinRT には HierarchicalDataTemplate もツリービューもありません。
それで自分でやり始めました。
私はそれのために作成ItemsControlDataTemplate DataTemplate1ました。でDataTemplate1私も作成ItemsControlして設定DataTemplate2ItemTemplateます。、DataTemplate2などItemTemplateですDataTemplate3。最後DataTemplateはなしItemsControlです。

ボタンClickイベントでは、 (つまり)IsVisible内の任意の要素の Elements プロパティを変更するので、要素を展開/折りたたむカスタム ロジックを簡単に実行できます。DataModelElement[]

<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レベルはまだ利用できません。

DataTemplateまた、C# で作成し、再帰的な方法で手動で適用DataTemplateしようとしました。 しかし、私は2つの問題を発見しました。ItemSource

  1. プロパティDataTemplateがないため、実際にメトロ(C#)で作成する方法がわかりません。VisualTree( ) しか作れvar dt= new Datatemplate();ず、変更方法がわかりません。

  2. DataTemplateXAML から読み取る場合( var dateTemplateRoot = (DataTemplate)this.Resources["DataTemplate1"];)

私はまだそれを見つけることができずItemsControl、そのDataTemplate.
実際には、 を使用var content = dateTemplateRoot.LoadContent();して検索ItemsControlすることはできますが、その後のコンテンツを(コンテンツのタイプが)VisualTreeHelperとして使用することはできません。DataTemplateDependencyObject

それで、実際には2つの質問があります。すべてのアイテムを「バインド」し、プロパティ
のみを切り替えて階層ドロップダウンリストを実行するのは良い方法ですか? 2 つ目は、無制限のレベルの階層ネストを有効にする方法です。Visibility

4

1 に答える 1

0

WinRT XAML Toolkit にTreeViewコントロールが追加されました。確認してください: http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/b0ee76bd6492#WinRTXamlToolkit/Controls/TreeView/TreeView.cs

ただし、注意してください。これは Silverlight Toolkit からの大まかな移植であり、うまく機能しない可能性があります。また、Windows ストア アプリケーションの一部としてリリースすることを計画している場合は、タッチ フレンドリーではないため、アプリがデスクトップ専用でない限り、スタイルを大幅に変更する必要があります。

于 2013-02-28T16:54:44.817 に答える