Прокрутка во вложенном Списке wpf - PullRequest
1 голос
/ 24 июля 2011

Немного предыстории: Мы пытаемся создать элемент управления расписанием, как outlook, с некоторыми пользовательскими функциями. Я уже прошел подобный пост в Code Project, но мы склонны использовать немного другой подход (пытаясь использовать подход MVVM).

Проблема: В настоящее время у нас есть список с 3 пунктами. Каждый элемент в списке - это еще один список с границами в качестве элементов. Например, код XAML выглядит следующим образом

<ListBox Name="MasterListBox" HorizontalAlignment="Stretch" Height="500" Width="500">
              <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBoxItem >
            <ListBox Name="Child1" Height="240">
                <ListBoxItem>
                    <Border Width="200" Background="Red" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200" Background="Blue" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200"  Background="Green" Height="40"></Border>
                </ListBoxItem>
            </ListBox>
        </ListBoxItem>
        <ListBoxItem >
            <ListBox Name="Child2" Height="240">
                <ListBoxItem >
                    <Border Width="200" Background="Yellow" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200" Background="Green" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200"  Background="Pink" Height="40"></Border>
                </ListBoxItem>
            </ListBox>
        </ListBoxItem>
        <ListBoxItem >
            <ListBox Name="Child3" Height="240">
                <ListBoxItem >
                    <Border Width="200" Background="Aqua" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200" Background="Beige" Height="40"></Border>
                </ListBoxItem>
                <ListBoxItem >
                    <Border Width="200"  Background="Brown" Height="40"></Border>
                </ListBoxItem>
            </ListBox>
        </ListBoxItem>
</ListBox>

Проблема в том, что, когда я нажимаю на 1-й элемент (Child1) в MasterListBox в белой области и перетаскиваю вправо, окно списка MasterListBox прокручивается вправо, но когда я нажимаю на подэлемент (например, например, для красной границы) и перетащите вправо, MasterListBox не прокручивает вправо. Мне известно, что я пытаюсь перетащить элемент внутреннего списка, и по этой причине внешний список не прокручивается, но есть способ переопределить это. Я также хочу выбрать внутренний элемент, поэтому не могу установить IsHitTestVisible = "False" для внутреннего элемента.

Спасибо, что заглянули в это. Ваша помощь очень ценится.

С уважением
Саурабй

1 Ответ

0 голосов
/ 28 июля 2011

Один из способов сделать это - создать функцию перетаскивания для прокрутки, используя внутренние события ListBox s OnPreviewLeftMouseDown, OnPreviewMouseMove и OnPreviewMouseUp для реализации желаемого эффекта.

Другой способ - найти событие (я), отвечающее за функциональность перетаскивания в прокрутку, во внутреннем ListBox и переопределить обработчик события так, чтобы событие было перенаправлено на внешний ListBox.

...