2011-02-24 449 views
16

私はあきらめます - xamlのMaxHeightのハードコードされた値を指定せずにリストビューに垂直スクロールバーを表示するにはどうすればよいですか?ここWPF ListViewスクロールバー

は私のXAMLである(私は、データモデルが含まれていませんでしたが、それは基本的にディレクトリのリストです)

<UserControl x:Class="WpfApplication1.Views.FolderViewView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="500" > 
<DockPanel> 
    <StackPanel DockPanel.Dock="Top"> 
     <Label Name="lblFolder" Content="{Binding Path=FolderName}" MinWidth="250"/> 
     <Button Name="btnFolder" Content="Select Folder" Click="btnFolder_Click" /> 
    </StackPanel> 
    <DockPanel> 
     <ListView Name="lstFiles" ItemsSource="{Binding}" Margin="1" MaxHeight="200" Height="Auto" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" > 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding Path=FileName}" /> 
        <GridViewColumn Header="Extenstion" DisplayMemberBinding="{Binding Path=Extension}" /> 
        <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Path=FileSize}" /> 
        <GridViewColumn Header="Creation Date" DisplayMemberBinding="{Binding Path=CreateDate}" /> 
        <GridViewColumn Header="Modified Date" DisplayMemberBinding="{Binding Path=ModifiedDate}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </DockPanel> 
</DockPanel> 

ListViewコントロールにMaxHeightのを設定せずに、スクロールバーは表示されません。リストビューを画面より大きくするのに十分な項目がある場合。 MaxHeigt = "250"の場合、スクロールバーが表示されますが、ユーザーがウィンドウのサイズを変更すると、リストビューは拡張されません。

多分私は間違った質問をしているはずです:それは、ウィンドウの高さが変更されたときリストビューの最大高さを変更するにはどうすればいいですか?

助けてください、これは...今、最後の日のために問題がDockPanelの用法から来

リー

答えて

18

感謝を壁に私を押し上げてきました。デフォルトでは、必要なすべての領域(利用可能な領域に関係なく)を子に与えます。私はあなたの代わりにDockPanelGridパネルを使用することをお勧めそれを修正するために

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0"> 
     <Label Name="lblFolder" Content="{Binding Path=FolderName}" MinWidth="250"/> 
     <Button Name="btnFolder" Content="Select Folder" Click="btnFolder_Click" /> 
    </StackPanel> 


    <ListView Grid.Row="1" Name="lstFiles" ItemsSource="{Binding}" Margin="1" > 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Filename" DisplayMemberBinding="{Binding Path=FileName}" /> 
       <GridViewColumn Header="Extenstion" DisplayMemberBinding="{Binding Path=Extension}" /> 
       <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Path=FileSize}" /> 
       <GridViewColumn Header="Creation Date" DisplayMemberBinding="{Binding Path=CreateDate}" /> 
       <GridViewColumn Header="Modified Date" DisplayMemberBinding="{Binding Path=ModifiedDate}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
+2

これはまだ私のために動作しません。申し訳ありませんが、アイテムがまだページの一番下に降ろして、スクロールバーが表示されません。 ScrollViewer.CanContentScroll = "True"と指定した場合でも、ListViewのScrollViewer.VerticalScrollBarVisibility = "Auto"です。 – Lee

+0

@リー - 次に、このUserControlを含むマークアップに問題があります。あなたの質問に追加することができますので、私は見てみることができますか? –

+1

ここでは、ホストウィンドウ ' ' – Lee