2015-09-28 3 views
1

Я новичок в XAML, и я не могу понять это. Я хочу, чтобы страница с двумя столбцами была состыкована (в терминах winforms) с контейнером. В первом столбце есть список, и я хочу, чтобы это автоматически показывало полосу прокрутки, когда это необходимо. Я смог сделать это, но только если я установил Height или MaxHeight из ListBox. Моя проблема заключается в том, что список больше не будет увеличиваться в размерах при изменении размера основного окна/формы. Я хочу, чтобы прикрепить список к первому столбцу, чтобы он изменил размер при изменении размера формы и при необходимости отобразил полосу прокрутки.Как добавить панель прокрутки в Listbox в сетке в XAML?

Вот код не показывает полосу прокрутки:

<Window x:Class="WpfApplication3.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Column="0" Grid.Row="0"> 

     <ListBox x:Name="lstView" 
       ScrollViewer.VerticalScrollBarVisibility="Auto" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
        Margin="10"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Height="20"> 
         <TextBlock Text="{Binding}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </StackPanel> 
</Grid> 

Вот код, который показывает полосу прокрутки, но имеет фиксированную высоту.

<Window x:Class="WpfApplication3.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Column="0" Grid.Row="0"> 

     <ListBox x:Name="lstView" 
       ScrollViewer.VerticalScrollBarVisibility="Auto" 
       ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
       Height="200" 
        Margin="10"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Height="20"> 
         <TextBlock Text="{Binding}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </StackPanel> 
</Grid> 

+0

Попробуйте изменить высоту строки в строке «*» вместо «Авто» и удалите высоту списка –

+0

. Поместите холст с высотой и шириной внутри панели стека и поместите список в холст. – madan

+0

Я пробовал, но ведет себя одинаково. нет полосы прокрутки, если высота в ListBox не указана. если я укажу высоту, список не будет расти. – doms

ответ

1

Проблемы с видимостью полосы прокрутки при использовании StackPanel. Я думаю, это потому, что StackPanel всегда такой же большой, как и все его дети. Попробуйте реорганизовать макет для удаления StackPanel (используйте вместо этого Grid) и посмотрите, поможет ли это.

+0

Я вижу !! благодаря! Я удалил стек стек, и он работает сейчас, как я ожидаю, это должно быть! – doms

+0

Ну, вы можете подняться и принять его как ответ, поскольку он работает так, как ожидалось. :) –

Смежные вопросы