2

スタイリングが正しくないとListBox、仮想化が失われることを読みました。この質問に対する notacat の回答として、彼の解決策は OK です。

ItemsPresenter をGridBorder、 ...などの別のコンテナに入れるたびに気づきます。

<ControlTemplate TargetType="ListBox">
                    <ScrollViewer x:Name="ScrollViewer" 
                                  BorderBrush="{TemplateBinding BorderBrush}" 
                                  BorderThickness="{TemplateBinding BorderThickness}" 
                                  Background="{TemplateBinding Background}" 
                                  Foreground="{TemplateBinding Foreground}" 
                                  Padding="{TemplateBinding Padding}">
                        <StackPanel>
                            <TextBlock Text="{TemplateBinding MyText}" />
                            <ItemsPresenter/>
                        </StackPanel>
                    </ScrollViewer>
</ControlTemplate>

ListBox仮想化はすぐに失われます。TextBlockしかし、 beforeを配置したいのですがItemsPresenterScrollViewerは 1 つの子要素しか受け入れません。

これに対処する方法は?

更新: この投稿を見ました。Derek LakinはそれTextBlockScrollViewerテンプレートに配置することですが、どのようTextBlockに配置できScrollContentPresenterますか?

P / S:私は私のように設定VirtualizingStackPanelItemsPanelますListBox

4

1 に答える 1

2

リストボックスの itemtemplate を作成していますが、ItemPresenter がスクロールビューアーの直接の子であることが重要です。リストボックスをテンプレート化する方法の詳細については、http://msdn.microsoft.com/en-us/library/ms754242.aspxを参照してください。また、この記事は本当に役に立ちました。

itempresenter を直接の子にすることができない場合は、ItemsPresenter に ItemsPresenter という名前を付ける必要があります。

于 2012-12-21T10:52:19.950 に答える