Elementy potomne przeglądarki scrollviewer uniemożliwiające przewijanie kółkiem myszy?
Mam problem z przewijaniem kółka myszy, aby działało w następującym XAML, co uprościłem dla jasności:
<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>
Wizualnie wynikiem jest obszar o znanym rozmiarze, gdzieDataField
s czytane z kolekcji mogą być reprezentowane przezTextBox
es, które mają dowolną pozycję, rozmiar itp. W przypadkach, gdyListBox
stylizowany „obszar” jest zbyt duży, aby można było wyświetlać naraz, możliwe jest przewijanie w poziomie i pionie, ale tylko za pomocą pasków przewijania.
Aby uzyskać lepszą ergonomię i rozsądek, przewijanie kółkiem myszy powinno być możliwe i normalneScrollViewer
obsłużyłoby to automatycznie, aleListBox
zdaje się przekazywać takie zdarzenia, że rodzicScrollViewer
nigdy ich nie widzi. Do tej pory udało mi się tylko ustawić ustawienie przewijania kółIsHitTestVisible=False
albo dlaListBox
lub rodzicGrid
, ale oczywiście żadne z zdarzeń myszy elementu potomnego nie działa później.
Co mogę zrobić, aby zapewnićScrollViewer
widzi zdarzenia kółka myszy, zachowując inne dla elementów potomnych?
Edytuj: Właśnie się tego nauczyłemListBox
ma wbudowanyScrollViewer
który prawdopodobnie kradnie zdarzenia koła od rodzicaScrollViewer
a ten określający szablon kontrolny może go wyłączyć. Zaktualizuję to pytanie, jeśli to rozwiąże problem.