次のような階層データを表示する必要があります。
public class Element
{
public string Name { get; private set; }
public Element[] Elements { get; private set; }
}
Name各要素に長方形( )が付いた垂直パネルになります。要素をクリックすると、その子要素がその下に表示されます (要素が展開されます)。それらのいずれかをクリックすると、その要素が表示されます。
私はすでにこれをグーグルで検索しましたが、WinRT には HierarchicalDataTemplate もツリービューもありません。
それで自分でやり始めました。
私はそれのために作成ItemsControlしDataTemplate DataTemplate1ました。でDataTemplate1私も作成ItemsControlして設定DataTemplate2しItemTemplateます。、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
プロパティ
DataTemplateがないため、実際にメトロ(C#)で作成する方法がわかりません。VisualTree( ) しか作れvar dt= new Datatemplate();ず、変更方法がわかりません。DataTemplateXAML から読み取る場合(var dateTemplateRoot = (DataTemplate)this.Resources["DataTemplate1"];)
私はまだそれを見つけることができずItemsControl、そのDataTemplate.
実際には、 を使用var content = dateTemplateRoot.LoadContent();して検索ItemsControlすることはできますが、その後のコンテンツを(コンテンツのタイプが)VisualTreeHelperとして使用することはできません。DataTemplateDependencyObject
それで、実際には2つの質問があります。すべてのアイテムを「バインド」し、プロパティ
のみを切り替えて階層ドロップダウンリストを実行するのは良い方法ですか?
2 つ目は、無制限のレベルの階層ネストを有効にする方法です。Visibility