Дочерние элементы 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
и что указание шаблона элемента управления может отключить его. Я обновлю этот вопрос, если это решит проблему.