2012-01-12 4 views
0

ListBoxのItemsPanelTemplateはVirtualizingStackPanelです。私はListBoxのスタイルを定義します。 ListBox仮想化は機能しません。私に何ができる?あなたのControlTemplateでWindows Phone Styleは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

<VirtualizingStackPanel>にご<StackPanel>を変更すると、それはそれを行う必要があります。

+0

に変更、プロジェクトが動作することはできません。 –

1

はのControlTemplateを変更しよう:

<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をBorderに配置したいのですが? – onmyway133

+0

私はそれを試していませんでした。しかし、既にScrollViewerにはボーダー関連のプロパティがすべてあるので、おそらく追加のボーダーは必要ありません。実際にいくつかの枠線が必要な場合は、ScrollViewerを枠内に配置することができます。仮想化はスクロールに基づいて動作するため、ScrollViewerからのすべてのコンテンツがそれに影響しません。 – notacat

関連する問題