2012-01-12 76 views
0

我们知道ListBox的ItemsPanelTemplate是VirtualizingStackPanel。我为我的ListBox定义了一个Style。 ListBox虚拟化无法工作。我能做什么?Windows Phone风格使ListBox的虚拟化禁用。如何恢复虚拟化?

<Style x:Key="ListBoxStyle" TargetType="ListBox"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBox"> 
        <ScrollViewer x:Name="ScrollViewer" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            Foreground="{TemplateBinding Foreground}" 
            Padding="{TemplateBinding Padding}"> 
         <StackPanel> 
          <ItemsPresenter/> 
          <HyperlinkButton Content="Add More" 
              FontSize="25" 
              Grid.Row="1" 
              Name="hybtnAddMerchant" 
              Click="hybtnAddMerchant_Click" 
              VerticalAlignment="Bottom"/> 
         </StackPanel> 
        </ScrollViewer> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

回答

-1

在您的ControlTemplate来改变你的<StackPanel><VirtualizingStackPanel>而且应该这样做。

+0

变化,该项目无法正常工作。 – 2012-01-13 02:25:38

1

尝试改变控件模板:

<ControlTemplate TargetType="ListBox"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <ScrollViewer x:Name="ScrollViewer" Grid.Row="0" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        Background="{TemplateBinding Background}" 
        Foreground="{TemplateBinding Foreground}" 
        Padding="{TemplateBinding Padding}"> 
      <ItemsPresenter/> 
     </ScrollViewer> 
     <HyperlinkButton Content="Add More" FontSize="25" 
      Grid.Row="1" Name="hybtnAddMerchant" Click="hybtnAddMerchant_Click" VerticalAlignment="Bottom"/> 
    </Grid> 
</ControlTemplate> 
+0

这工作。但是如果我想将ItemsPresenter放置在边框中呢? – onmyway133 2012-12-21 10:18:18

+0

我没有尝试过。但是你已经在ScrollViewer中拥有所有与边界相关的属性,所以也许你不需要额外的边框。如果你真的需要几个边框,你可以将ScrollViewer放在边框中,它应该可以工作。虚拟化基于滚动,因此ScrollViewer中的所有内容都不应该影响它。 – notacat 2012-12-21 15:11:01