【发布时间】:2015-10-17 22:42:09
【问题描述】:
我有一个处理滑动事件的Grid。在此Grid 上放置了ListView。不幸的是,如果ListView 有自己的滚动条(比页面大),它会“吃掉”所有的滑动事件。无法在ListView 所在的屏幕部分捕获向左或向右滑动事件。
Grid 和 ListView:
<Grid
Name="SwipingSurface"
Background="Transparent"
Height="657"
Margin="30">
(...)
<ListView
ShowsScrollingPlaceholders="True"
Grid.Row="1"
ItemsSource="{Binding MeditationDiary}"
FontFamily="Segoe WP"
Margin="0,45.5,0,0"
Grid.RowSpan="2"
d:LayoutOverrides="TopPosition, BottomPosition">
<ListView.ItemTemplate>
<DataTemplate>
[Grid and textblock template]
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
处理滑动(向右)事件的代码:
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
SwipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;
SwipingSurface.ManipulationStarted += OnStarted;
SwipingSurface.ManipulationCompleted += OnManipulationCompleted;
}
public void OnStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
_initialPoint = e.Position;
}
public void OnManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
var currentPoint = e.Position;
if (_initialPoint.X - currentPoint.X >= Constants.SwipingTreshold)
{
// Do something
}
}
有没有办法能够在Grid 上处理滑动事件而不会受到ListView 的阻碍?
/edit 有人对这个问题进行了投票,因为他或她发现不清楚要问什么,所以特此澄清:上面的代码生成下面的ListView。如果您在History 上滑动,则可以向左滑动并注意事件。但是,如果您在包含内容的ListView 上滑动(仅当它比页面长并且您可以向下滚动时),则不会注册滑动。我认为这是因为 ListView 正在捕获事件。
【问题讨论】:
标签: c# xaml listview windows-phone-8.1