<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.Resources>
<Style TargetType="Image">
<Setter Property="Margin" Value="-12,-36,0,0"/>
</Style>
</Grid.Resources>
<phone:Panorama x:Name="photoFlow1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="530">
</phone:Panorama>
</Grid>

private void AddPanoramaItem(LongMoreViewModel ItemNumber)
{
for (int i = 0; i < ItemNumber.Apps.Count; i++)
{
PanoramaItem Navitation = new PanoramaItem();
Image nimage = new Image();
nimage.RenderTransform = new CompositeTransform();
nimage.ManipulationDelta += Navitation_ManipulationDelta;
nimage.DoubleTap += Navitation_DoubleTap;

AppRecommend mde = ItemNumber.Apps[i] as AppRecommend;
nimage.Source= new BitmapImage(new Uri(mde.Name, UriKind.Absolute));
nimage.Stretch = System.Windows.Media.Stretch.Fill;
Navitation.Content = nimage;
photoFlow1.Items.Add(Navitation);
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////

private void Navitation_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
Image grid = sender as Image;
if (grid == null)
return;
bool oldIsPinch = isPinching;
isPinching = e.PinchManipulation != null;

if (oldIsPinch == false && isPinching == false)
{
this.OnDragDelta(sender, e);
}
else if (oldIsPinch == false && isPinching == true)
{
this.OnPinchStarted(sender, e);
}
else if (oldIsPinch == true && isPinching == true)
{
this.OnPinchDelta(sender, e);
}
else if (oldIsPinch == true && isPinching == false)
{
this.OnPinchCompleted(sender, e);
}
}
private void OnDragDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement framework = sender as FrameworkElement;
CompositeTransform compositeTransform = framework.RenderTransform as CompositeTransform;
if (compositeTransform.ScaleX == 1.0 && compositeTransform.ScaleY == 1.0)
return;
Point point = TransChanged(compositeTransform).Transform(e.DeltaManipulation.Translation);
compositeTransform.TranslateX += point.X;
compositeTransform.TranslateY += point.Y;
}
private GeneralTransform TransChanged(CompositeTransform trans)
{
CompositeTransform compositeTransform = new CompositeTransform();
compositeTransform.Rotation = trans.Rotation;
compositeTransform.ScaleX = trans.ScaleX;
compositeTransform.ScaleY = trans.ScaleY;
compositeTransform.CenterX = trans.CenterX;
compositeTransform.CenterY = trans.CenterY;
compositeTransform.TranslateX = 0.0;
compositeTransform.TranslateY = 0.0;
return (GeneralTransform)compositeTransform;
}
private void OnPinchStarted(object sender, ManipulationDeltaEventArgs e)
{
this.isPinching = true;
foreach (PanoramaItem item in photoFlow1.Items)
{
PanoramaItem pItem = photoFlow1.SelectedItem as PanoramaItem;
if (!item.Equals(pItem))
item.Visibility = Visibility.Collapsed;
}
}
private void OnPinchDelta(object sender, ManipulationDeltaEventArgs e)
{
FrameworkElement framework = sender as FrameworkElement;
CompositeTransform compositeTransform = framework.RenderTransform as CompositeTransform;
double scaleX = compositeTransform.ScaleX;
double deltaScale1 = e.PinchManipulation.DeltaScale;
double scaleY = compositeTransform.ScaleY;
double deltaScale2 = e.PinchManipulation.DeltaScale;
double num1 = compositeTransform.ScaleX * deltaScale1;
double num2 = compositeTransform.ScaleY * deltaScale2;
if (num2 > (double)this.maxScale || num1 > (double)this.maxScale)
{
compositeTransform.ScaleX = (double)this.maxScale;
compositeTransform.ScaleY = (double)this.maxScale;
}
else
{
compositeTransform.ScaleX = num1;
compositeTransform.ScaleY = num2;
}
}
private void OnPinchCompleted(object sender, ManipulationDeltaEventArgs e)
{
this.isPinching = false;
}
private void Navitation_DoubleTap(object sender, System.Windows.Input.GestureEventArgs e)
{
FrameworkElement framework = sender as FrameworkElement;
CompositeTransform compositeTransform = framework.RenderTransform as CompositeTransform;
compositeTransform.ScaleX = compositeTransform.ScaleY = 1;
compositeTransform.CenterX = framework.Width / 2;
compositeTransform.CenterY = framework.Height / 2;

foreach (PanoramaItem item in photoFlow1.Items)
{
PanoramaItem pItem = photoFlow1.SelectedItem as PanoramaItem;
if (!item.Equals(pItem))
item.Visibility = Visibility.Visible;
}
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

<!--<phone:Panorama x:Name="photoFlow1" ItemsSource="{Binding Apps}" Margin="-12,0,-48,0">
<phone:Panorama.HeaderTemplate>
<DataTemplate>
<ContentControl Content="" FontSize="1"/>
</DataTemplate>
</phone:Panorama.HeaderTemplate>
<phone:Panorama.ItemTemplate>
<DataTemplate>
<Image Stretch="None" x:Name="Navitation" local:CCImage.Source="{Binding Name}"
ManipulationDelta="Navitation_ManipulationDelta" DoubleTap="Navitation_DoubleTap">
<Image.RenderTransform>
<CompositeTransform/>
</Image.RenderTransform>
</Image>
</DataTemplate>
</phone:Panorama.ItemTemplate>
</phone:Panorama>-->

public class LongMoreViewModel : BaseViewModel
{
public LongMoreViewModel()
{
Apps = new ObservableCollection<object>();
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/9418d78e-41d3-4010-b752-08a22f56a1bd?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/be2dac62-de4a-44bb-87bf-1f2b41d56df1?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/e0117eea-1cff-4c4b-835f-d00ebf4abe26?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/cb572d91-f0c1-4bdc-92b6-0b510801cf33?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/a6fa5c5d-f7a1-4c21-a5f8-0040383263ee?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/ac5a04d3-9a4a-4d40-9e7b-fa2db58b4e05?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/dcedb633-a6f7-4113-9211-598e30e38cca?imageType=ws_screenshot_large&rotation=0" });
Apps.Add(new AppRecommend() { Name = "http://cdn.marketplaceimages.windowsphone.com/v8/images/aa048089-c5de-426f-b313-462a2996c0b9?imageType=ws_screenshot_large&rotation=0" });
}
public IList<object> Apps { get; set; }
private BitmapImage imageSource;
/// <summary>
/// 获取或设置当前分享天气的图片.
/// </summary>
public BitmapImage ImageSource
{
get
{
return imageSource;
}
set
{
if (value != imageSource)
{
imageSource = value;
NotifyPropertyChanged("ImageSource");
}
}
}
}
public class AppRecommend
{
public string Name { get; set; }

public override bool Equals(object obj)
{
if ((obj != null) && (obj.GetType() == typeof(PanoramaItem)))
{
var thePanoItem = (PanoramaItem)obj;

return base.Equals(thePanoItem.Header);
}
else
{
return base.Equals(obj);
}
}

public override int GetHashCode()
{
return base.GetHashCode();
}
}

wp8 入门到精通 Gallery的更多相关文章

  1. wp8 入门到精通 虚拟标示符 设备ID

    //获得设备虚拟标示符 wp8 public string GetWindowsLiveAnonymousID() { object anid = new object(); string anony ...

  2. wp8 入门到精通 仿美拍评论黑白列表思路

    static bool isbool = false; private void BindGameDelete() { Tile tile = new Tile(); List<Color> ...

  3. wp8 入门到精通 生命周期

  4. wp8 入门到精通 定时更新瓷贴

    public class ScheduledAgent : ScheduledTaskAgent { static ScheduledAgent() { Deployment.Current.Disp ...

  5. wp8 入门到精通 ImageCompress 图片压缩

    //实例化选择器 PhotoChooserTask photoChooserTask = new PhotoChooserTask(); BitmapImage bimg; int newPixelW ...

  6. wp8 入门到精通 MultiMsgPrompt

    List<NotifyMsg> arraymsg = new List<NotifyMsg>(); List<NotifyInfo> ArrayNotifyInfo ...

  7. wp8 入门到精通 数据库更新字段(一)

    public class UserInfoDB : BaseDB { public UserInfoDB() : base(@"Data Source=isostore:\MakeLove\ ...

  8. wp8 入门到精通 启动系统分享照片任务

    PhotoChooserTask photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += photoChoos ...

  9. wp8 入门到精通 Utilities类 本地存储+异步

    public class CCSetting { public async static void AddOrUpdateValue<T>(string key, T value) { t ...

随机推荐

  1. VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“

    调试项目遇到错误提示,Visual Studio 2010(或VS2008或VS2005)启动调试的时候,弹出提示信息: 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Micro ...

  2. show_sync_logs

    存入数据库的操作 CREATE TABLE `show_sync_logs` ( `id` ) NOT NULL AUTO_INCREMENT, `queue` ) DEFAULT NULL COMM ...

  3. Node.js简介

    Node核心思想:1.非阻塞:2.单线程:3.事件驱动. 在目前的web应用中,客户端和服务器端之间有些交互可以认为是基于事件的,那么AJAX就是页面及时响应的关键.每次发送一个请求时(不管请求的数据 ...

  4. 数据库视图 (View)和EntityFramework Code First结合使用

    问题来源: 项目需要进行查询操作,会涉及多表间的联合查询,使用Entity Framework会牵涉到效率问题,为增加查询速度,所以使用数据库视图技术,综合来讲是将Model类映射到数据库View. ...

  5. C# 读写ini文件

    1.添加引用 using System.IO; using System.Runtime.InteropServices; 2.声明API函数 #region API函数声明 [DllImport(& ...

  6. offset求结构体成员的偏移量

    [代码]  C++ Code  12345678910111213141516171819202122232425262728293031   /* version: 1.0 author: hell ...

  7. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...

  8. ASM:《X86汇编语言-从实模式到保护模式》第七章应用例:用adc命令计算1到1000的累加

    在16位的处理器上,做加法的指令是add,但是他每次只能做8位或者16位的加法,除此之外,还有一个带进位的加法指令adc(Add With Carry),他的指令格式和add一样,目的操作数可以是8位 ...

  9. Enum:Face The Right Way(POJ 3276)

    面朝大海,春暖花开 题目大意:农夫有一群牛,牛排成了一排,现在需要把这些牛都面向正确的方向,农夫买了一个机器,一次可以处理k只牛,现在问你怎么处理这些牛才可以使操作数最小? 这道题很有意思,其实这道题 ...

  10. C# 总复习

    1.循环语句 四要素:初始条件.循环条件.循环体.状态改变 循环的最后一句:循环条件不再满足 2. ++     --int a = 5; //在赋值语句中,后++需要,先进性赋值,然后进行+1运算 ...