我有越來越鼠標滾輪滾動在以下XAML,我已經爲了清楚而簡化工作的問題:scrollviewer的子元素阻止用鼠標滾輪滾動?
<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>
在視覺上,結果是,其中DataField
從閱讀S一些已知的大小的區域集合可以用具有任意位置,大小等的TextBox
表示。如果ListBox
的樣式「區域」太大而無法一次全部顯示,則可以進行水平和垂直滾動,但只能使用滾動條。
爲了更好的人機工程學和理智,鼠標滾輪滾動應該是可能的,通常ScrollViewer
會自動處理它,但ListBox
似乎交給這些事件使得母ScrollViewer
永遠看不到它們。到目前爲止,我只能使輪盤滾動工作設置IsHitTestVisible=False
爲ListBox
或父Grid
,但當然沒有子元素的鼠標事件後工作。
我該怎麼做才能確保ScrollViewer
看到鼠標滾輪事件,同時保留其他孩子的元素?
編輯:我剛纔得知ListBox
有一個內置的ScrollViewer
這可能是從父母ScrollViewer
偷輪子事件,並指定一個控制模板可以禁用它。如果能解決問題,我會更新這個問題。
你應該接受這個答案。 – BlargleMonster
這也適用於'TreeView'而不是'ListBox'。謝謝! – seeb