我有Grid
来处理滑动事件。在此Grid
上放置ListView
。不幸的是,如果ListView
有自己的滚动条(大于页面),它就会吃掉#34;所有滑动事件。无法在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
正在捕捉事件。
答案 0 :(得分:1)
也许添加ScrollViewer.HorizontalScrollBarVisibility =&#34;已禁用&#34;你的listView声明可能有所帮助。作为替代方法您可以尝试修改listView的样式。也许你会在那里找到一个滚动查看器,然后禁用它设置它的属性。