3

私のリストボックスにヘッダーを追加したいのですが、これをテンプレートを使って行います。 問題は、リストボックスのテンプレートを拡張すると、リストボックスのvirtualizingstackpanelが期待どおりに機能しなくなっているように見えます。リストボックスのスクロールビューアーにヘッダーを追加し、virtualizingStackPanel(wp7)を保持する

このような(VirtualizingStackPanel stops working when overriding the default control template for ScrollViewer)のようなstackoverflowでいくつかの関連する質問が見つかりましたが、そこに与えられたソリューションはWP7に適用することはできません:私はscrollviewerの "CanContentScroll"という名前のプロパティを見つけることができません。

私のコード

<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の既定のスタイルを変更して、代わりにヘッダーを配置して、このような2つのスタイルを生成するという方法を見つけたことです。

<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

ソリューションを公開していただき、ありがとうございます。魅力的な作品 –

関連する問題