我有一个问题让鼠标滚轮滚动在下面的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>
在视觉上,其结果是一些已知的尺寸,其中的一个区域DataField
从集合秒读取可以与表示TextBox
,其具有任意的位置ES,尺寸,等等。 在该情况下, ListBox
的病急乱投医‘区域’太大而无法一次全部显示,水平和垂直滚动是可能的,但只能用滚动条。
为了更好的人体工程学和理智,鼠标滚轮滚动应该是可能的,通常ScrollViewer
会自动处理它,但ListBox
似乎被移交这些事件使得母ScrollViewer
永远看不到它们。 到目前为止,我只能够得到滚轮滚动工作被设置IsHitTestVisible=False
对于无论是ListBox
或父Grid
,但当然没有子元素的鼠标事件后,这项工作。
我能做些什么,以确保ScrollViewer
看到鼠标滚轮事件,同时保留其他子元素?
编辑:我刚刚得知ListBox
有一个内置ScrollViewer
这可能是在偷父轮事件ScrollViewer
和指定控件模板可以禁用它。 如果能解决问题,我会更新这个问题。