我有以下简单的XAML页面设置:
<Page ...>
<ScrollViewer>
<StackPanel>
<Border Height="100">
<TextBlock Text="Block 1" />
</Border>
<ListView Height="200">
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
</ListView>
<Border Height="800">
<TextBlock Text="Block 2" />
</Border>
</StackPanel>
</ScrollViewer>
</Page>通常,当用户滚动到页面的顶部/底部时,顶级ScrollViewer提供的滚动“反弹”效果让我很高兴。然而,当在double-bounce;中滚动时,我得到了一个ListView,即ListView和ScrollViewer都给出了弹性拉伸。我觉得发生这种情况是一种奇怪的用户体验。
是否有任何方法在防止ListView传递到父滚动容器时保持ListView的弹出?
发布于 2017-12-06 06:05:14
这是只发生在触摸输入而不是鼠标输入,可能有许多方式,但它是最快和容易的方式。
这会起作用的
XAML
<ScrollViewer Name="sv"> <!-- Name added -->
<StackPanel>
<Border Height="100">
<TextBlock Text="Block 1" />
</Border>
<ListView Name="lv" Height="200"> <!-- Name added -->
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
<ListViewItem Content="Lorem" />
<ListViewItem Content="Ipsum" />
</ListView>
<Border Height="800">
<TextBlock Text="Block 2" />
</Border>
</StackPanel>
</ScrollViewer>C#
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
//Add this two event handlers and you can add this event handler from xaml also.
lv.AddHandler(UIElement.PointerEnteredEvent, new PointerEventHandler(OnPointerEntered), true);
lv.AddHandler(UIElement.PointerExitedEvent, new PointerEventHandler(OnPointerExited), true);
}
private void OnPointerEntered(object sender, PointerRoutedEventArgs e)
{
sv.VerticalScrollMode = ScrollMode.Disabled;
}
private void OnPointerExited(object sender, PointerRoutedEventArgs e)
{
sv.VerticalScrollMode = ScrollMode.Enabled;
}
}https://stackoverflow.com/questions/47660777
复制相似问题