次の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>
視覚的には、結果は既知のサイズの領域であり、コレクションから読み取られたsは、任意の位置、サイズなどを持つesでDataField
表すことができます。'スタイルの「領域」が大きすぎて一度に表示できない場合は、水平および垂直スクロールが可能ですが、スクロールバーを使用する必要がありますTextBox
。ListBox
人間工学と正気を高めるために、マウスホイールのスクロールが可能であり、通常ScrollViewer
は自動的に処理されますがListBox
、親ScrollViewer
が決して見ないように、これらのイベントを処理しているように見えます。これまでのところ、ホイールスクロールを機能させることができたのは、または親IsHitTestVisible=False
のいずれかを設定することだけでしたが、もちろん、その後、子要素のマウスイベントは機能しません。ListBox
Grid
ScrollViewer
他の子要素を保持しながら、マウスホイールイベントを確実に表示するにはどうすればよいですか?
編集:親からホイールイベントを盗む可能性ListBox
のある組み込みがあり、コントロールテンプレートを指定すると無効にできることを学びました。問題が解決した場合は、この質問を更新します。ScrollViewer
ScrollViewer