Дочерние элементы scrollviewer, предотвращающие прокрутку колесиком мыши?

У меня проблема с настройкой прокрутки колесика мыши в следующем XAML, который я упростил для ясности:

<ScrollViewer
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible"
CanContentScroll="False"
>
    <Grid
    MouseDown="Editor_MouseDown"
    MouseUp="Editor_MouseUp"
    MouseMove="Editor_MouseMove"
    Focusable="False"
    >
        <Grid.Resources>
            <DataTemplate
            DataType="{x:Type local:DataFieldModel}"
            >
                <Grid
                Margin="0,2,2,2"
                >
                    <TextBox
                    Cursor="IBeam"
                    MouseDown="TextBox_MouseDown"
                    MouseUp="TextBox_MouseUp"
                    MouseMove="TextBox_MouseMove"
                    />
                </Grid>
            </DataTemplate>
        </Grid.Resources>
        <ListBox
        x:Name="DataFieldListBox"
        ItemsSource="{Binding GetDataFields}"
        SelectionMode="Extended"
        Background="Transparent"
        Focusable="False"
        >
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemContainerStyle>
                <Style
                TargetType="ListBoxItem"
                >
                    <Setter
                    Property="Canvas.Left"
                    Value="{Binding dfX}"
                    />
                    <Setter
                    Property="Canvas.Top"
                    Value="{Binding dfY}"
                    />
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>
    </Grid>
</ScrollViewer>

Визуально, результатом является область некоторого известного размера, гдеDataFieldчтение из коллекции может быть представлено сTextBoxОни имеют произвольное положение, размер и так далее. В случаях, когдаListBoxСтилизованная «область» слишком велика для одновременного отображения, возможна горизонтальная и вертикальная прокрутка, но только с полосами прокрутки.

Для лучшей эргономики и здравомыслия, прокрутка колесика мыши должна быть возможной, и обычноScrollViewer будет обрабатывать это автоматически, ноListBox кажется, передает эти события так, что родительScrollViewer никогда их не видит. До сих пор я только мог заставить работать прокрутку колесIsHitTestVisible=False либо дляListBox или родительGrid, но, конечно, ни одно из событий мыши дочернего элемента не работает после этого.

Что я могу сделать, чтобы обеспечитьScrollViewer видит события колеса мыши, сохраняя другие для дочерних элементов?

Изменить: я только что узнал, чтоListBox имеет встроенныйScrollViewer который, вероятно, крадет события колеса от родителяScrollViewer и что указание шаблона элемента управления может отключить его. Я обновлю этот вопрос, если это решит проблему.

Ответы на вопрос(4)

Ваш ответ на вопрос