6

TreeViewが次のように設定されている場合、TreeViewの仮想化を停止するにはどうすればよいですか?

<TreeView 
    ItemsSource="{Binding}" 
    VirtualizingStackPanel.IsVirtualizing="True">
    <TreeView.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </TreeView.ItemsPanel>
    <TreeView.ItemContainerStyle>
        <Style
            TargetType="{x:Type TreeViewItem}">
            <Setter
                Property="IsExpanded"
                Value="{Binding IsExpanded, Mode=TwoWay}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

仮想化されていないものがあります。ノードを展開すると(そしてスヌープを使用してチェックすると)、すべてのTreeViewItemが作成されます。TreeViewがコンテンツを仮想化するのを妨げるコンテナの組み合わせがあるかどうか疑問に思っています。(たとえば、StackPanelでホストするなど)

4

2 に答える 2

7

問題はスタイリングにありました。いくつかの調査の結果、TreeViewをターゲットとする名前のないスタイル(つまり、DataType={x:Type TreeView}なしのスタイルx:Key)とTreeViewItemApp.xaml(または同等のもの)をターゲットとするスタイルがあることがわかりましたControlTemplate。それぞれのスタイルをオーバーライドしていました。

これらのスタイルには、をに設定するトリガーがなく、仮想化についても言及されていませんでしたItemsPanelVirtualizingStackPanelスタイルが削除されると、TreeViewは正常に機能します。ローカルプロパティが設定ItemsPanelVirtualizingStackPanel.Isvirtualizing="True"TreeViewこれらのプロパティが伝播されていなかっTreeViewItemsたとしても、TreeViewのトップレベルは仮想化されますが、サブカテゴリは仮想化されません(仮想化の動作はに依存していたためTreeViewItem

于 2010-11-25T04:20:50.693 に答える
1

同じ問題がありました。私の場合、TreeViewの初期サイズは制限されていませんでした(TreeViewはポップアップ内にあります)。そのため、仮想化パネルは初めてすべてのコントロールを初期化しました。

TreeViewのMaxHeigtを1000に設定すると、問題が解決します。

于 2020-04-26T10:03:48.833 に答える