2011-02-24 10 views
16

OK, poddaję się - w jaki sposób mogę uzyskać pionowe paski przewijania, które pojawią się w widoku listy, bez określania zakodowanej wartości dla MaxHeight w Xaml?WPF ListView Scrollbars

tutaj jest mój XAML (i nie zostały dołączone do modelu danych, ale to w zasadzie listing katalogu)

<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> 

Bez ustawiania maxheight sprawie kontroli ListView, pasek przewijania nie pojawia gdy jest wystarczająco dużo elementów, aby widok Listy był większy niż ekran. Po MaxHeigt = "250" pojawi się pasek przewijania, ale teraz widok listy nie rozszerza się, gdy użytkownik zmienia rozmiar okna.

Może zadaję niewłaściwe pytanie i powinno być: Jak zmienić maksymalną wysokość widoku listy przy zmianie wysokości okna?

Proszę o pomoc, to został doprowadza mnie po ścianie na ostatni dzień teraz ...

Dzięki

Lee

Odpowiedz

18

Problem pochodzi z wykorzystaniem DockPanel. Domyślnie daje dziecku całą wymaganą przestrzeń (bez względu na dostępne miejsce).

Aby go naprawić Proponuję użyć panelu Grid zamiast DockPanel:

<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

Niestety, to nadal nie działa dla mnie, pozycje nadal zasnąć dolnej części strony, a pasek przewijania nie staje się widoczny. Nawet w szczególności ustawienie ScrollViewer.CanContentScroll = "True" ScrollViewer.VerticalScrollBarVisibility = "Auto" na ListView. – Lee

+0

@Lee - W takim razie problem dotyczy znaczników zawierających tę kontrolkę UserControl. Czy mógłbyś dodać to do swojego pytania, abym mógł rzucić okiem? –

+1

tutaj jest okno hosta ' ' – Lee

Powiązane problemy