Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Скроллинг listbox'а внутри другого listbox  [new]
aushakov
Member

Откуда:
Сообщений: 1
Имеется listbox (обычный, с вертикальной ориентацией), каждый элемент которого представляет собой listbox с горизонтальной ориентацией элементов.
Вот как это выглядит:
Картинка с другого сайта.
Как видно, скроллинг осуществляется из внешнего listbox и отсутствует во внутреннем.
Код:
<Window.Resources>
    <HierarchicalDataTemplate x:Key="ItemTemplateSchedule">
        <ListBox>
            <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBoxItem>My-Very-Long-Item-Nimber-1___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Nimber-2___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Nimber-3___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Nimber-4___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Nimber-5___</ListBoxItem>
        </ListBox>
    </HierarchicalDataTemplate>
</Window.Resources>

<Grid>
    <ListBox ItemTemplate="{StaticResource ItemTemplateSchedule}" >
        >
    </ListBox>
</Grid>


Моя задача была перенести скроллбар во внутренний listbox. Решение этой проблемы достаточно простое - задать свойство Width для внутреннего listbox:
Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=ActualWidth}"

Теперь мы имеем что-то вроде этого:
Картинка с другого сайта.
Я пошел дальше. Мне необходимо добавить еще один контрол (TextBlock) перед каждым внутренним listbox (т.е. теперь у нас есть внешний listbox, каждый элемент которого состоит из TextBlock и горизонтального listbox). Не долго думая, помещаю оба контрола в StackPanel с горизонтальной ориентацией, задаю ему (лайауту) свойство ширины как делал раньше для внутреннего listbox и что я вижу? Не работает!
В итоге я получаю что-то вроде этого:
Картинка с другого сайта.
Т.е. скролбар опять вернулся во внешний listbox, но как видно из скриншота, скролить теперь по сути нечего, скроллбар двигается на несколько пикселей влево и вправо.
Текущий код (только измененная часть по сравнению с первым):
<HierarchicalDataTemplate x:Key="ItemTemplateSchedule">
    <StackPanel Orientation="Horizontal" Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=ActualWidth}">
        <TextBlock Text="This is Text in a TextBlock"/>
        <ListBox >
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBoxItem>My-Very-Long-Item-Number-1___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Number-2___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Number-3___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Number-4___</ListBoxItem>
            <ListBoxItem>My-Very-Long-Item-Number-5___</ListBoxItem>
        </ListBox>
    </StackPanel>
</HierarchicalDataTemplate>


Итак, мой вопрос заключается в том, как же все-таки сделать вертикальный listbox, каждый элемент которого будет состоять из 2 контролов: TextBox и горизонтального listbox. При этом, скроллинг должен осуществляться именно во внутреннем listbox.
19 фев 13, 19:20    [13950955]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить