次のような階層データを表示する必要があります。
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 プロパティを変更するので、要素を展開/折りたたむカスタム ロジックを簡単に実行できます。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 レベルの階層を有効にしたい場合、10 個のデータ テンプレートをコピーしなければならないことです。そして11レベルはまだ利用できません。
DataTemplate
また、C# で作成し、再帰的な方法で手動で適用DataTemplate
しようとしました。
しかし、私は2つの問題を発見しました。ItemSource
プロパティ
DataTemplate
がないため、実際にメトロ(C#)で作成する方法がわかりません。VisualTree
( ) しか作れvar dt= new Datatemplate();
ず、変更方法がわかりません。DataTemplate
XAML から読み取る場合(var dateTemplateRoot = (DataTemplate)this.Resources["DataTemplate1"];
)
私はまだそれを見つけることができずItemsControl
、そのDataTemplate
.
実際には、 を使用var content = dateTemplateRoot.LoadContent();
して検索ItemsControl
することはできますが、その後のコンテンツを(コンテンツのタイプが)VisualTreeHelper
として使用することはできません。DataTemplate
DependencyObject
それで、実際には2つの質問があります。すべてのアイテムを「バインド」し、プロパティ
のみを切り替えて階層ドロップダウンリストを実行するのは良い方法ですか?
2 つ目は、無制限のレベルの階層ネストを有効にする方法です。Visibility