网上找的源码 XAML代码
<Canvas x:Name="LayoutRoot" MouseLeftButtonDown="LayoutRoot_MouseLeftButtonDown"></Canvas>后台代码
//图片位置
private string[] albums = { "imgs/s1.jpg", "imgs/s2.jpg", "imgs/s3.jpg" };
//当前位置
private double current = 0;
//目标位置
private double target = 0;
//存储图片
private List<Image> imgs = new List<Image>();
//计时器
private DispatcherTimer timer = null; public MainPage()
{
InitializeComponent();
addImgs();
//不同浏览器加载滚轮事件
HtmlPage.Window.AttachEvent("DOMMouseScroll", LayoutRoot_MouseWheel);
HtmlPage.Window.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
HtmlPage.Document.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
} private void addImgs()
{
string url = null;
Image cover = null;
//逐个添加img对象
for (int index = 0; index < albums.Length; index++)
{
url=albums[index];//url
cover = new Image();//新建一个图片对象
Uri uri = new Uri(url, UriKind.Relative);
cover.Source = new BitmapImage(uri);
LayoutRoot.Children.Add(cover);
setImg(cover, index);
imgs.Add(cover);
}
} private void setImg(Image img, int index)
{
//图片与当前(current)的关系
double offset = index - current; PlaneProjection plane = new PlaneProjection();
plane.RotationY=Math.Abs(offset)*65/(offset!=0?offset:1);//设置对象围绕y轴旋转的角度
img.Projection = plane; double left ;
double top = 50;
double center =img.ActualWidth / 2 - 100;
double scale = 1; if (index == current)
{
left = center;
top = 40;
scale = 1.15;
}
else if (index > current)
{
left = center + offset * 50 + 60;
}
else
{
left = center + offset * 50 - 40;
}
//对当前图片进行播放
ScaleTransform scaleTransForm = new ScaleTransform();
scaleTransForm.ScaleX = scale;
scaleTransForm.ScaleY = scale;
img.RenderTransform = scaleTransForm; //设置img的属性
img.SetValue(Canvas.LeftProperty, left);
img.SetValue(Canvas.TopProperty,top);
img.SetValue(Canvas.ZIndexProperty, (int)(-Math.Abs(offset)) * 100);
} private void LayoutRoot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveIndex(1);
} private void LayoutRoot_MouseWheel(object sender, HtmlEventArgs args)
{
double mouseDelta = 0;
ScriptObject e = args.EventObject;
// Mozilla and Safari
if (e.GetProperty("detail") != null)
{
mouseDelta = ((double)e.GetProperty("detail"));
} // IE and Opera
else if (e.GetProperty("wheelDelta") != null)
mouseDelta = ((double)e.GetProperty("wheelDelta")); mouseDelta = Math.Sign(mouseDelta); moveIndex((mouseDelta > 0) ? 1 : -1); } private void moveIndex(int value)
{
//获取目标图片位置,并确保其在图片数量范围内
target += value;
target = Math.Max(0, target);
target = Math.Min(imgs.Count - 1, target);
} //计时器Tick,移动到目标图片
private void timerTick(object sender, EventArgs e)
{
for (int i = 0; i < imgs.Count; i++)
{
Image image = imgs[i];
setImg(image, i);
}
//imgs = imgs;
} //启动计时器
public void startShow()
{
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
timer.Tick += new EventHandler(timerTick);
timer.Start();
}现在是 到了红色代码区 会出现异常 图片没有生成 还有一个问题 就是计时器是何时启动的 因为我没有看到有地方调用startShow这个方法 求解
<Canvas x:Name="LayoutRoot" MouseLeftButtonDown="LayoutRoot_MouseLeftButtonDown"></Canvas>后台代码
//图片位置
private string[] albums = { "imgs/s1.jpg", "imgs/s2.jpg", "imgs/s3.jpg" };
//当前位置
private double current = 0;
//目标位置
private double target = 0;
//存储图片
private List<Image> imgs = new List<Image>();
//计时器
private DispatcherTimer timer = null; public MainPage()
{
InitializeComponent();
addImgs();
//不同浏览器加载滚轮事件
HtmlPage.Window.AttachEvent("DOMMouseScroll", LayoutRoot_MouseWheel);
HtmlPage.Window.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
HtmlPage.Document.AttachEvent("onmousewheel", LayoutRoot_MouseWheel);
} private void addImgs()
{
string url = null;
Image cover = null;
//逐个添加img对象
for (int index = 0; index < albums.Length; index++)
{
url=albums[index];//url
cover = new Image();//新建一个图片对象
Uri uri = new Uri(url, UriKind.Relative);
cover.Source = new BitmapImage(uri);
LayoutRoot.Children.Add(cover);
setImg(cover, index);
imgs.Add(cover);
}
} private void setImg(Image img, int index)
{
//图片与当前(current)的关系
double offset = index - current; PlaneProjection plane = new PlaneProjection();
plane.RotationY=Math.Abs(offset)*65/(offset!=0?offset:1);//设置对象围绕y轴旋转的角度
img.Projection = plane; double left ;
double top = 50;
double center =img.ActualWidth / 2 - 100;
double scale = 1; if (index == current)
{
left = center;
top = 40;
scale = 1.15;
}
else if (index > current)
{
left = center + offset * 50 + 60;
}
else
{
left = center + offset * 50 - 40;
}
//对当前图片进行播放
ScaleTransform scaleTransForm = new ScaleTransform();
scaleTransForm.ScaleX = scale;
scaleTransForm.ScaleY = scale;
img.RenderTransform = scaleTransForm; //设置img的属性
img.SetValue(Canvas.LeftProperty, left);
img.SetValue(Canvas.TopProperty,top);
img.SetValue(Canvas.ZIndexProperty, (int)(-Math.Abs(offset)) * 100);
} private void LayoutRoot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveIndex(1);
} private void LayoutRoot_MouseWheel(object sender, HtmlEventArgs args)
{
double mouseDelta = 0;
ScriptObject e = args.EventObject;
// Mozilla and Safari
if (e.GetProperty("detail") != null)
{
mouseDelta = ((double)e.GetProperty("detail"));
} // IE and Opera
else if (e.GetProperty("wheelDelta") != null)
mouseDelta = ((double)e.GetProperty("wheelDelta")); mouseDelta = Math.Sign(mouseDelta); moveIndex((mouseDelta > 0) ? 1 : -1); } private void moveIndex(int value)
{
//获取目标图片位置,并确保其在图片数量范围内
target += value;
target = Math.Max(0, target);
target = Math.Min(imgs.Count - 1, target);
} //计时器Tick,移动到目标图片
private void timerTick(object sender, EventArgs e)
{
for (int i = 0; i < imgs.Count; i++)
{
Image image = imgs[i];
setImg(image, i);
}
//imgs = imgs;
} //启动计时器
public void startShow()
{
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 0, 10);
timer.Tick += new EventHandler(timerTick);
timer.Start();
}现在是 到了红色代码区 会出现异常 图片没有生成 还有一个问题 就是计时器是何时启动的 因为我没有看到有地方调用startShow这个方法 求解
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货