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。。。为了可读性