3

我想向我的ListBoxes添加标题,并使用模板执行此操作。 问题是,如果我扩展列表框的模板,似乎列表框的virtualizingstackpanel不再按预期工作:它会加载所有内容,然后才能滚动它。将标题添加到列表框的滚动查看器并保留virtualizingStackPanel(wp7)

我在这样的计算器中发现了一些相关问题(VirtualizingStackPanel stops working when overriding the default control template for ScrollViewer),但是给出的解决方案不能应用于WP7:我找不到名为“CanContentScroll”的scrollviewer属性。

我的代码

<Style x:Key="ListBoxStyle1" 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> 
         <TextBlock Text="..."/> 
         <ItemsPresenter/> 
        </StackPanel> 
       </ScrollViewer> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

回答

2

说实话,我真的不知道实际的问题是在这里什么; VirtualizingStackPanel仍然在视觉树中,但似乎没有实际添加的项目。好消息是,好消息是我找到了一种方法来解决它,通过更改ScrollViewer的默认样式来代替标题,从而产生两种样式,如下所示:

<Style x:Key="ScrollViewerStyle1" TargetType="ScrollViewer"> 
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="Padding" Value="0"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="BorderBrush" Value="Transparent"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ScrollViewer"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         Background="{TemplateBinding Background}"> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="ScrollStates"> 
          <VisualStateGroup.Transitions> 
           <VisualTransition GeneratedDuration="00:00:00.5" /> 
          </VisualStateGroup.Transitions> 
          <VisualState x:Name="Scrolling"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="VerticalScrollBar" 
                 Storyboard.TargetProperty="Opacity" 
                 To="1" 
                 Duration="0" /> 
            <DoubleAnimation Storyboard.TargetName="HorizontalScrollBar" 
                 Storyboard.TargetProperty="Opacity" 
                 To="1" 
                 Duration="0" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="NotScrolling"> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Grid Margin="{TemplateBinding Padding}"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions> 
         <TextBlock Text="Header" Style="{StaticResource PhoneTextLargeStyle}"/> 
         <ScrollContentPresenter x:Name="ScrollContentPresenter" 
               Grid.Row="1" 
               Content="{TemplateBinding Content}" 
               ContentTemplate="{TemplateBinding ContentTemplate}" /> 
         <ScrollBar x:Name="VerticalScrollBar" 
            Grid.RowSpan="2" 
            IsHitTestVisible="False" 
            Opacity="0" 
            Height="Auto" 
            Width="5" 
            HorizontalAlignment="Right" 
            VerticalAlignment="Stretch" 
            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
            IsTabStop="False" 
            Maximum="{TemplateBinding ScrollableHeight}" 
            Minimum="0" 
            Value="{TemplateBinding VerticalOffset}" 
            Orientation="Vertical" 
            ViewportSize="{TemplateBinding ViewportHeight}" /> 
         <ScrollBar x:Name="HorizontalScrollBar" 
            Grid.RowSpan="2" 
            IsHitTestVisible="False" 
            Opacity="0" 
            Width="Auto" 
            Height="5" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Bottom" 
            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" 
            IsTabStop="False" 
            Maximum="{TemplateBinding ScrollableWidth}" 
            Minimum="0" 
            Value="{TemplateBinding HorizontalOffset}" 
            Orientation="Horizontal" 
            ViewportSize="{TemplateBinding ViewportWidth}" /> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
<Style x:Key="ListBoxStyle2" 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" 
           Grid.Row="1" 
           Style="{StaticResource ScrollViewerStyle1}" 
           Foreground="{TemplateBinding Foreground}" 
           Background="{TemplateBinding Background}" 
           BorderBrush="{TemplateBinding BorderBrush}" 
           BorderThickness="{TemplateBinding BorderThickness}" 
           Padding="{TemplateBinding Padding}"> 
        <ItemsPresenter /> 
       </ScrollViewer> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>
+0

感谢您发布解决方案。奇迹般有效 – 2012-01-10 20:33:19