C# 通过在Windows Phone上滑动使覆盖变暗

C# 通过在Windows Phone上滑动使覆盖变暗,c#,windows-phone-8.1,overlay,swipe,C#,Windows Phone 8.1,Overlay,Swipe,我有一个矩形作为覆盖,我想通过上下滑动来修改它的不透明度,就像在应用程序中的自由说话闹钟一样。我发现,我必须处理manufactionstarted和manufactiondelta事件,但不确定使用哪个值。在这一点上,我可以通过滑动来改变不透明度,但只有在滑动完成时才会改变,我希望在滑动时不透明度会改变。我该怎么做 现在,我有这个: private Point initialpoint; private double opacity; private void rec_overlay_Mani

我有一个矩形作为覆盖,我想通过上下滑动来修改它的不透明度,就像在应用程序中的自由说话闹钟一样。我发现,我必须处理
manufactionstarted
manufactiondelta
事件,但不确定使用哪个值。在这一点上,我可以通过滑动来改变不透明度,但只有在滑动完成时才会改变,我希望在滑动时不透明度会改变。我该怎么做

现在,我有这个:

private Point initialpoint;
private double opacity;
private void rec_overlay_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
        {
        initialpoint = e.Position;
    }

private void rec_overlay_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    Point currentpoint = e.Position;

    if (initialpoint.Y - currentpoint.Y < 0)
    {
        opacity += 0.1;
        rec_overlay.Opacity = opacity;
        System.Diagnostics.Debug.WriteLine("Swipe down");
    }
    else if(initialpoint.Y - currentpoint.Y > 0)
    {
        opacity -= 0.1;
        rec_overlay.Opacity = opacity;
        System.Diagnostics.Debug.WriteLine("Swipe up");
    }
}
私有点初始点;
私人双重不透明;
私有void rec_overlay_ManipulationStarted(对象发送器,manipulationstartedroutedventargs e)
{
初始点=e.位置;
}
私有void rec_overlay_操纵delta(对象发送方,操纵deltaroutedventargs e)
{
点电流点=e.位置;
if(initialpoint.Y-currentpoint.Y<0)
{
不透明度+=0.1;
rec_overlay.Opacity=不透明度;
系统。诊断。调试。写线(“向下滑动”);
}
else if(initialpoint.Y-currentpoint.Y>0)
{
不透明度-=0.1;
rec_overlay.Opacity=不透明度;
系统。诊断。调试。写入线(“刷起”);
}
}

上述代码有效,只需将不透明度值从0.1更改为0.01

基本上,手指移动的距离应与矩形的不透明度变化成正比

您可以监视最近的Y变化,即
e.Delta.Translation.Y
,并将其除以
矩形的
实际高度
,以获得更准确的
不透明度
变化

这样就行了

private void rec_overlay_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
    // keep the Opacity value within its boundary
    if (rec_overlay.Opacity > 1)
    {
        rec_overlay.Opacity = 1;
    }
    else if (rec_overlay.Opacity < 0)
    {
        rec_overlay.Opacity = 0;
    }

    // update the opacity whenever a movement happens
    rec_overlay.Opacity += -e.Delta.Translation.Y / this.rec_overlay.ActualHeight;
}
private void rec_overlay_ManipulationDelta(对象发送方,Windows.UI.Xaml.Input.manipulationdeltaroutedventargs e)
{
//将“不透明度”值保持在其边界内
如果(rec_overlay.Opacity>1)
{
rec_overlay.Opacity=1;
}
否则如果(rec_overlay.Opacity<0)
{
rec_overlay.Opacity=0;
}
//每当发生移动时更新不透明度
rec_overlay.Opacity+=-e.Delta.Translation.Y/this.rec_overlay.ActualHeight;
}

好吧,我把它改成相反的..
acity-=-e.De
。。但它比我的0.01的解决方案好得多,也更平滑,谢谢。欢迎您。:)也可能只是+=e.De。。。为了可读性