0

現在、子のすべてのレベルを最も遠くまで表示するアイテムのツリー ビューがあります。最初のレベルの子供だけを表示するにはどうすればよいですか? HierarchicalDataTemplateおそらく間違ったアプローチですか?レベル 2 以降の子を折りたたむだけでは十分ではありません。

4

4 に答える 4

1

データソースのフィルター処理されたバージョンを使用して、必要なレベルのみが含まれるようにすると、HierarchialDataTemplate を問題なく使用できます。

于 2013-02-06T13:26:42.427 に答える
0

DataTemplateの代わりに、を使用してHierarchicalDataTemplateください。

編集:了解しました。いくつかのオプションがあります。上記のトミーの推薦は良いものでエレガントです。もう1つのオプションは、子を表示したくないアイテムのTreeViewItemのControlTemplateをオーバーライドして、エキスパンダー領域を非表示にすることです。

于 2013-02-06T12:52:49.370 に答える
0

データを操作しないと、1 つのレベルの子だけを表示することはできません。コントロールには、表示されるノードの深さを決定できるプロパティが必要でした。

この解決策は私に思い浮かび、非常に明白でした。私は 2 つのフラット ツリー ビューを使用するだけで、2 番目のビューSelectedItemは最初のビューに依存しています。HierarchicalDataTemplateまったく必要ありません。ただの共通点DataTemplate

于 2013-02-07T18:47:16.823 に答える
0

私が理解しているように、トップレベルのノードとそれらの1レベルの子が必要であり、それ以上は必要ありません(したがって、全体で2レベルのノードがあります)。次に、XAML で実行する場合は、2 つのテンプレートを使用して実行できます。

<Grid>
    <Grid.Resources>
        <DataTemplate x:Key="TemplateLeaf">
            <TextBlock Text="{Binding Text}" /> <!-- Whatever leaf view you want -->
        </DataTemplate>
        <sdk:HierarchicalDataTemplate ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateLeaf}" x:Key="TemplateNode">
            <TextBlock Text="{Binding Text}" />
        </sdk:HierarchicalDataTemplate>
    </Grid.Resources>
    <sdk:TreeView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateNode}" />
</Grid>

(これは Silverlight バージョンですが、同じです)。デフォルトでは、HierarchicalDataTemplateはそれ自体を独自の として使用しますが、必要に応じItemTemplateて次のレベルの他のテンプレート (プレーンを含むDataTemplate) に置き換えることができます。

于 2013-02-07T20:00:26.270 に答える