Sto avendo un problema ottenere rotella di scorrimento del mouse per lavorare nella seguente XAML, che ho semplificato per chiarezza:Elementi figlio di scrollviewer che impediscono lo scorrimento con la rotellina del mouse?
<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>
Visivamente, il risultato è una superficie di circa dimensioni note dove DataField
s in lettura da una la collezione può essere rappresentata con TextBox
es che hanno posizione, dimensione e così via arbitrarie. Nei casi in cui l'area "stile" di ListBox
è troppo grande per essere visualizzata tutte contemporaneamente, è possibile eseguire lo scorrimento orizzontale e verticale, ma solo con le barre di scorrimento.
Per una migliore ergonomia e la sanità mentale, mouse rotella di scorrimento dovrebbe essere possibile, e normalmente ScrollViewer
sarebbe gestire automaticamente, ma il ListBox
sembra essere consegnare quegli eventi in modo tale che il genitore ScrollViewer
non li vede. Finora sono stato in grado di ottenere lo scroll wheeling lavorando impostando IsHitTestVisible=False
per il ListBox
o il genitore Grid
, ma ovviamente nessuno degli eventi del mouse dell'elemento figlio funziona dopo.
Cosa posso fare per garantire che lo ScrollViewer
visualizzi gli eventi della rotellina del mouse conservando gli altri per gli elementi figlio?
Edit: ho appena saputo che ListBox
ha un built-in ScrollViewer
che probabilmente è rubando eventi ruota dal genitore ScrollViewer
e che specifica un modello di controllo può disattivarlo. Aggiornerò questa domanda se questo risolve il problema.
Si dovrebbe accettare questa risposta. – BlargleMonster
Questo funziona anche per 'TreeView' invece di' ListBox'. Grazie! – seeb