2009-05-15 10 views
0

私はWPFリストボックスを持っており、通常は4つまたは5つのアイテムが表示されます。私のアプリケーションでは、スクロールバーを表示する必要はほとんどありません(十分なスペースがあります)。リストビューのスクロールバーがレイアウトをぼやけます

しかし、リストに項目がある場合は、垂直スクロールバーを表示する必要がありますが、結果として私のコンテンツにはスペースが少なくなり、作成した「背景」には見えなくなりますリストボックスの後ろに。

私はスクロールバーが表示されるようレイアウト内の部屋を予約しています。それを行う方法はありますか? (おそらくコンテンツにスクロールバーがオーバーレイされている)

答えて

0

解決策を見つけました。

this MSDN articleに従うことで、ScrollViewerの新しいデフォルトスタイルが作成されました。次に、スクロールバーが配置されている部分を変更しました。

オリジナル行動

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto"/> 
    <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Border Grid.Row="0" Grid.Column="1"> 
    <ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" /> 
    </Border> 
    <ScrollBar Orientation="Vertical" Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" /> 
    <ScrollBar Orientation="Horizontal" Grid.Row="1" Grid.Column="1" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/> 
</Grid> 

たときに目に見える、彼らは追加のスペースを取りませんので、今すぐスクロールバーがコンテンツ上にオーバーレイされた新しい行動

<Grid> 
    <!-- Presentation below is different from the default: the scrollbar is overlayed on the content. --> 
    <ScrollContentPresenter CanContentScroll="True" Content="{TemplateBinding ScrollViewer.Content}" /> 
    <ScrollBar Orientation="Vertical" HorizontalAlignment="Right" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" Value="{TemplateBinding ScrollViewer.VerticalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" Name="PART_VerticalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" /> 
    <ScrollBar Orientation="Horizontal" VerticalAlignment="Bottom" Minimum="0" Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" Value="{TemplateBinding ScrollViewer.HorizontalOffset}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Name="PART_HorizontalScrollBar" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}"/> 
</Grid> 

。もちろん、コンテンツはコンテンツのためのスペースを予約する必要があります。

+0

をとります。 –

0

ScrollViewrでラップするのはどうですか?

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
<!-- your ListBoxHere -->   
</ScrollViewer> 
+0

これは私の問題を解決していません、スクロールバーがまだこれの欠点は、スクロールバーがコンテンツの上部に表示され、おそらくそれのいくつかを曖昧にすることであるスペース –

0

質問にお答えいただきましたとおり、XAMLコードに従えば、垂直スクロールバーの幅を予約するだけでよいでしょう。

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="30"/> <!-- reserved for the vertical scrollbar --> 
     </Grid.ColumnDefinitions> 

     <Listbox .../> 
    </Grid> 
</ScrollViewer> 
関連する問題