2011-11-15 24 views
2

私はWPFアプリケーションで作業しており、scrollViewerを使用して画面領域を制限しているコンテンツを表示しています。うまく動作し、問題はありません。WPFのScrollViewerでの問題

私のウィンドウにリストボックスやグリッドなどが含まれていて、スクロールバーが自分自身にスクロールバーを追加するのではなく、スクロールバーがそれを拡張する必要があると考えているため。

リストボックスの高さをハードコードする必要はありません。異なる解像度で同じにするため、高さを高くしたいのですが、必ずしもそうではありません。

おかげ

答えて

5

あなたは、ビューアの高さ/幅を設定せずにScrollViewer内部変数高さ/幅のオブジェクトを含めることはできません。

スクロールビューアは事実上無限の高さを持っているため、グリッドは「使用可能な」スペースを埋めるように拡大されます。 @JoeWhiteが彼のコメントで述べたように、ScrollViewerは、すべてのコンテンツを保持する必要がある場合と同じくらい大きなものにすることができるコンテナです。アンカーが役に立たない場合は、ListBoxが既にアンカーされています。「ああ、私が必要とするサイズになるよ」と言われているだけです。

高さを制限するか、ScrollViewerの外にListBoxを移動するか、ScrollViewer以外のものを使用する必要があります。

「これは、スクロール領域を別のスクロール領域に配置する危険性があります。使い勝手が悪く、動作を定義するのが難しい」

+0

おかげで、我々は、WPFでのWindowsフォームのANCHORプロパティのようなものがありますか? –

+2

@MSingh、あなたはScrollViewerの中に入れています。 ScrollViewerは、すべてのコンテンツを保持するために必要なだけの高さにできるコンテナです。アンカーは役に立ちません。実際、あなたのListBoxはすでに*アンカーされています。「ああ、あなたが私に必要なサイズになります。これらは、スクロール領域を別のスクロール領域に配置する危険性があります。使い勝手が悪く、動作を定義するのは難しいです。 –

+3

私はScrollViewerに対処しなければならないたびに、悪い一日になることを知っています。 :) – MetalMikester

1

ScrollViewerをGridにラップし、scrollviewerのWidthプロパティとHeightプロパティをグリッドのActualWidthとActualHeightにバインドできます。したがって、スクロールビューアは、ウィンドウのサイズ変更時に変更されるグリッドのサイズに等しい固定サイズを持ちます。

例:

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid Background="#FFF1F1F1" Height="49" VerticalAlignment="Top"> 
     <Button Content="Обзор" Margin="0,13,175.25,0" VerticalAlignment="Top" FontSize="14.667" HorizontalAlignment="Right" Width="95.147"> 
     </Button> 
     <Label Content="{Binding DocPath, Converter={StaticResource FileNameConverter}, FallbackValue=Выберите файл, TargetNullValue=Выберите файл}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="342.603" Margin="10,10,0,0" Height="33"/> 
     <Button Content="Загрузить данные" HorizontalAlignment="Right" Margin="0,13,10,0" VerticalAlignment="Top" Width="151.147" FontSize="14.667"> 
     </Button> 
    </Grid> 
    <Grid x:Name="scrollBorder" Margin="10,54,10,10"> 
     <ScrollViewer x:Name="LogScroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
         HorizontalAlignment="Left" VerticalAlignment="Top" 
         Height="{Binding ActualHeight, ElementName=scrollBorder}" Width="{Binding ActualWidth, ElementName=scrollBorder}" > 
      <ItemsControl ItemsSource="{Binding Log}" /> 
     </ScrollViewer> 
    </Grid> 
</Grid>