gpt4 book ai didi

c# - 如何让操作事件在包含 ScrollViewer 子元素的元素上工作

转载 作者:行者123 更新时间:2023-11-30 23:31:32 26 4
gpt4 key购买 nike

假设我有以下 XAML:

<Grid ManipulationMode="TranslateY" ManipulationDelta="Grid_ManipulationDelta">
<ScrollViewer HorizontalScrollMode="Enabled" VerticalScrollMode="Disabled" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
<StackPanel Orientation="Horizontal">
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
<Rectangle Width="100" Height="100" Fill="Red" />
<Rectangle Width="100" Height="100" Fill="Blue" />
</StackPanel>
</ScrollViewer>
</Grid>

(StackPanel 只是任意内容。)

我希望 Grid 只处理 TranslateY 操作事件,而 ScrollViewer 只处理水平滚动;但是,即使操作是垂直的而不是水平的,ScrollViewer 也会优先。网格从不接收 ManipulationDelta 事件,除非我在 ScrollViewer 上禁用滚动,这显然不是我想要的。

这与ScrollViewer直接操作事件的“神奇”行为有关系吗?我也尝试了“rails”设置的不同组合(即将 Grid 的 ManipulationMode 设置为 TranslateRailsY 并在 ScrollViewer 上将 IsHorizo​​ntalRailEnabled 设置为 true)但它仍然不起作用。

最佳答案

你是对的,ScrollViewer 的父元素不会接收到 manipulation 事件,因为它们被滚动查看器

但是, ScrollViewer 中的元素将能够接收它们,只要它们的ManipulationMode 包含System 模式。

在您的特定情况下,您需要监视 StackPanel 上的 ManipulationDelta 事件并将其 ManipulationMode 设置为 TranslateY ,系统.

另外不要忘记为您的 StackPanel 提供一个Transparent 背景以接收事件。

<StackPanel Background="Transparent" ManipulationMode="TranslateY,System" ManipulationDelta="StackPanel_ManipulationDelta">

关于c# - 如何让操作事件在包含 ScrollViewer 子元素的元素上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com