假设我在左侧边缘有宽度为 200 像素的堆栈面板。现在我想在此面板上处理从左到右的水平滑动并显示其他面板。然后处理从右向左滑动以隐藏它。
我尝试处理页面的 ManipulationStarted
和 ManipulationDelta
事件,但至少对鼠标似乎没有任何影响。有什么想法,什么是实现它的简单方法?
我尝试过的: 处理页面的滑动事件并在滑动检查开始时,如果它是在堆栈面板的边界内启动的,否则我将忽略它。
如果滑动的增量大于正 40,则看起来像是从左向右滑动。
我的 XAML 文件:
// standard stuff of page
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation="Vertical" Width="200" HorizontalAlignment="Left" Background="White" x:Name="Panel"/>
</Grid>
//继续标准的东西
C# 文件:
public MainPage()
{
this.InitializeComponent();
this.ManipulationDelta += MainPage_ManipulationDelta;
this.ManipulationStarted += MainPage_ManipulationStarted;
}
private void MainPage_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("heh");
if (e.Position.X < 200)
{
initialPoint = e.Position;
isSwiping = true;
}
}
private void MainPage_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (e.IsInertial && isSwiping)
{
Point currentPoint = e.Position;
if (currentPoint.X - initialPoint.X >= 40)
{
isSwiping = false;
e.Complete();
System.Diagnostics.Debug.WriteLine("finished swipe :)");
}
}
}
private Point initialPoint;
private Boolean isSwiping;
(再次省略默认空页)
最佳答案
您需要在控件上设置 ManipulationMode,例如ManipulationMode="TranslateX"并让控件响应 HitTest (即,如果它没有背景 - 将背景设置为透明)以接收操作事件。
再一次 - 为什么不使用内置支持滑动的 ListView?
关于c# - 在 WinRT 中处理控件上的水平滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562037/