¿Elementos secundarios del scrollviewer que impiden el desplazamiento con la rueda del ratón?
Estoy teniendo problemas para que la rueda del mouse funcione en el siguiente XAML, que he simplificado para mayor claridad:
<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>
Visualmente, el resultado es un área de algún tamaño conocido dondeDataField
Las lecturas de una colección se pueden representar conTextBox
Esos que tienen posición arbitraria, tamaño, etcétera. En los casos en que elListBox
El "área" de estilo es demasiado grande para mostrar todo a la vez, es posible el desplazamiento horizontal y vertical, pero solo con las barras de desplazamiento.
Para una mejor ergonomía y cordura, el desplazamiento de la rueda del mouse debería ser posible, y normalmenteScrollViewer
lo manejaría automáticamente, pero elListBox
Parece estar entregando esos eventos de tal manera que el padreScrollViewer
nunca los ve Hasta ahora solo he podido hacer funcionar el desplazamiento de la ruedaIsHitTestVisible=False
ya sea para elListBox
o el padreGrid
, pero, por supuesto, ninguno de los eventos del mouse del elemento hijo funciona después de eso.
¿Qué puedo hacer para asegurar laScrollViewer
¿Ve los eventos de la rueda del mouse mientras se conservan los demás para elementos secundarios?
Edit: me acabo de enterar de queListBox
tiene un incorporadoScrollViewer
que es probablemente robar eventos de la rueda del padreScrollViewer
y que al especificar una plantilla de control se puede deshabilitar. Voy a actualizar esta pregunta si eso resuelve el problema.