2

스타일을 잘못 지정하면 ListBox이 가상화를 잃게됩니다. notacat's answer in this question으로 그의 솔루션은 괜찮습니다.스타일 유지시 가상화 유지 방법 ListBox의 ControlTemplate?

나는

<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

바로 그 가상화를 잃게됩니다 내가 다른 컨테이너에 ItemsPresenter을 넣을 때마다 같은 Grid, Border 그 ... 알고 있습니다. 하지만 ItemsPresenter 앞에 TextBlock을 배치하고 ScrollViewer은 자식 요소 1 개만 허용합니다.

어떻게 처리해야합니까?

UPDATE : 나는이 post 참조 데릭 라킨가하는 TextBlockScrollViewer 템플릿에 배치하는 것입니다,하지만 어떻게 ScrollContentPresenter에 그 TextBlock을 배치 할 수 있습니다?

P/S는 : 내 ListBox에 대한 ItemsPanelVirtualizingStackPanel을 설정 않습니다.

답변

2

목록 상자에 대해 itemtemplate을 만들지 만 ItemPresenter가 scrollviewer의 직접적인 하위가되는 것이 중요합니다. 목록 상자 템플릿을 만드는 방법에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms754242.aspx을 확인하십시오. 나도 this article가 정말로 도움이되는 것을 알았다.

itempresenter가 직접 자식이 될 수없는 경우 ItemsPresenter에 ItemsPresenter라는 이름을 지정해야합니다.

+0

네 말이 맞아. 내가 가리키는 기사를 따르지만, ** **를 설정했지만 작동하지 않습니다. – onmyway133

+0

XAML을 볼 수 있습니까? – Michiel

+0

예, 여기 XAML http://pastebin.com/6BSfeyqc가 있으며 코드는 http://pastebin.com/yxwcFbGX – onmyway133