Elementos filho de scrollviewer impedindo a rolagem com a roda do mouse?
Estou com um problema ao mover a rolagem da roda do mouse para trabalhar no XAML a seguir, que simplifiquei para maior clareza:
<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, o resultado é uma área de algum tamanho conhecidoDataField
s lido de uma coleção pode ser representado comTextBox
es que têm posição arbitrária, tamanho, et cetera. Nos casos em que oListBox
A "área" estilizada é muito grande para ser exibida de uma só vez, a rolagem horizontal e vertical é possível, mas apenas com as barras de rolagem.
Para melhor ergonomia e sanidade, a rolagem da roda do mouse deve ser possível e normalmenteScrollViewer
iria lidar com isso automaticamente, mas oListBox
parece estar entregando esses eventos de tal forma que o paiScrollViewer
nunca os vê. Até agora, só consegui fazer com que a rolagem das rodas funcionasseIsHitTestVisible=False
tanto para oListBox
ou o paiGrid
, mas é claro que nenhum dos eventos de mouse do elemento filho funcionam depois disso.
O que posso fazer para garantirScrollViewer
vê eventos de roda do mouse enquanto preserva outros para elementos filho?
Edit: Acabei de aprender queListBox
tem um built-inScrollViewer
que provavelmente está roubando eventos de roda do paiScrollViewer
e que especificar um modelo de controle pode desativá-lo. Eu atualizarei esta questão se isso resolver o problema.