Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Вертикальная прокрутка в ListBox-е


Автор: V0fka 26.6.2013, 14:10
Привет!

Есть Listbox, который программно заполняется. Если я уменьшаю размер формы по вертикали, то часть Listbox-а пропадает из области видимости. При этом, если уменьшаю по горизонтали - то автоматом появляется горизонтальная полоса прокрутки. Как сделать, чтобы вертикальная полоса прокрутки появлялась?

Автор: dzaraev 27.6.2013, 14:46
Покажите ваш XAML код и код заполнения ListBox'a ?

Если просто разместить ListBox в гриде и в окне, то он по-умолчанию будет растянут и полосы прокрутки будут появляться и по горизонтали и по вертикали. Например так:
Код

<Window x:Class="WpfApplication6.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>
        <Border BorderBrush="LightCoral" BorderThickness="1">
            <ListBox x:Name="_listBox">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{Binding Name}" Background="Bisque" Margin="5"/>
                            <TextBlock Text="{Binding Description}" Background="LightCyan" Margin="5"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Border>
    </Grid>
</Window>


Код

        public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            _listBox.Items.Add(new Item {Name = "John Rembo", Description = "Tra-ta-ta-ta-ta"});
            _listBox.Items.Add(new Item {Name = "Ricky Martin", Description = "lalalalala"});
            _listBox.Items.Add(new Item {Name = "another person", Description = "nevermind"});
            _listBox.Items.Add(new Item { Name = "another person", Description = "nevermind" });
            _listBox.Items.Add(new Item { Name = "another person", Description = "nevermind" });
            _listBox.Items.Add(new Item { Name = "another person", Description = "nevermind" });
            _listBox.Items.Add(new Item { Name = "another person", Description = "nevermind" });
            _listBox.Items.Add(new Item { Name = "another person", Description = "nevermind" });
        }
    }

    public class Item
    {
        public string Name { get; set; }
        public string Description { get; set; }
    }

Автор: V0fka 1.7.2013, 09:50
Разметка такая:

Код

<StackPanel Orientation="Vertical" Grid.Row="1" VerticalAlignment="Center">
            <ListBox x:Name="fListBox" ItemsSource="{Binding Path=Articles}" BorderThickness="0">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Path=Title}" FontSize="14" FontWeight="Bold" ToolTip="{Binding Path=FullTitle}"/>
                            <TextBlock Text="{Binding Path=PubDate}" ToolTip="{Binding Path=FullTitle}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>


Заполняю таким кодом:

Код

int a;
for (a = 1; a <= 20; a++ )
{
     Articles.Add(new Article("title "+a.ToString(), "full title "+a.ToString(), "link "+a.ToString(), "pub date "+a.ToString()));
}

Автор: dzaraev 1.7.2013, 13:59
У вас в корне разметки стоит StackPanel. Поведение StackPanel таково, что если элементы в неё не влазят, то область, вышедшая за границу, просто отсекается. Самые простые варианты решения - поместить StackPanel в ScrollViewer 
Код

<ScrollViewer>
    <StackPanel Orientation="Vertical" Grid.Row="1" VerticalAlignment="Center"> 
        ...
    </StackPanel>
</ScrollViewer>

либо вместо StackPanel использовать DockPanel или Grid.

Автор: V0fka 1.7.2013, 14:16
dzaraev, премного благодарен! Сделал через DockPanel.

Автор: gambit 2.7.2013, 01:34
V0fka, если вопрос решен, отметьте его таковым, пожалуйста

Автор: V0fka 2.7.2013, 19:40
Помечаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)