WPF与Surface2.0SDK亲密接触–LibraryBar篇-创新互联

LibraryBar 介绍

     与LibraryStack 类似LibraryBar 也属于ItemsControl,在LibraryBar 里的组件会以水平平铺方式展示,并且也可以对其中的组件进行按组分类。同样LibraryBar 也是默认支持拖拽操作。

公司主营业务:成都网站设计、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出凤阳免费做网站回馈大家。

     下面的例子将通过LibraryBar 展示一组Sample 图片。首先,仍然可以使用DataTemplate 作为LibraryBar 的样式模板用来绑定图片资源。接下来在Grid 中添加LibraryBar 控件,并设置好ItemTemplate 数据模板。我们可以通过修改Rows 参数调整LibraryBar 中组件显示的行数。

                                                                Rows="3"
ItemTemplate="{StaticResource LibraryBarItemTemplate}"/>

     为LiraryBar 添加图片数据源。注意,同样不能将图片string[] 数组直接赋给LiraryBar,需要借助ObservableCollection。

string imagesPath = @"C:\Users\Public\Pictures\Sample Pictures\";  try  {      string[] files = System.IO.Directory.GetFiles(imagesPath, "*.jpg");      ObservableCollection items = new ObservableCollection(files);      mLibraryBar.ItemsSource = items;  }  catch (System.IO.DirectoryNotFoundException)  {      // Error info.  }

默认两行模式:

WPF 与Surface 2.0 SDK 亲密接触–LibraryBar 篇

三行模式:

WPF 与Surface 2.0 SDK 亲密接触–LibraryBar 篇

LibraryBar 分组

     接下来我们将图片进行分组操作,先增加一个PhotoAlbum 类,其中包含图片的路径、标签、组名信息。

class PhotoAlbum  {      private string label;      private string fileName;      private string groupName;      private BitmapImage bitmap;        public PhotoAlbum(string fileName, string label, string groupName)      {          this.fileName = fileName;          this.label = label;          this.groupName = groupName;          this.bitmap = new BitmapImage(new Uri(fileName, UriKind.Absolute));      }        public string Label      {          get { return label; }      }
public string FileName { get { return fileName; } }
public string GroupName { get { return groupName; } } public BitmapSource Bitmap { get { return bitmap; } } }

对DataTemplate 稍作修改,添加图片标签

                                                                

     依据GroupName 作为分组的方式,为GroupDescriptions 默认的集合浏览方式添加PropertyGroupDescription 对象,并赋给ItemsSource 属性。

ObservableCollection items = new ObservableCollection();  string imagesPath = @"C:\Users\Public\Pictures\Sample Pictures\";    items.Add(new PhotoAlbum(imagesPath + "Hydrangeas.jpg", "Hydrangeas", "Nature"));  items.Add(new PhotoAlbum(imagesPath + "Lighthouse.jpg", "Lighthouse", "Nature"));  items.Add(new PhotoAlbum(imagesPath + "Tulips.jpg", "Tulips", "Nature"));  items.Add(new PhotoAlbum(imagesPath + "Jellyfish.jpg", "Jellyfish", "Animal"));  items.Add(new PhotoAlbum(imagesPath + "Koala.jpg", "Koala", "Animal"));  items.Add(new PhotoAlbum(imagesPath + "Penguins.jpg", "Penguins", "Animal"));    mLibraryBar.ItemsSource = items;  ICollectionView defaultView = CollectionViewSource.GetDefaultView(items);  defaultView.GroupDescriptions.Add(new PropertyGroupDescription("GroupName"));

WPF 与Surface 2.0 SDK 亲密接触–LibraryBar 篇

LibraryBar 拖拽

     从上面的示例中可以发现,我们无法将图片从LibraryBar 中拖拽出来,当拖拽操作结束后图片会自动返回到LibraryBar。接下来将实现把图片拖拽到ScatterView 控件。

     首先,对XAML 控件进行下修改,将LibraryBar 放入ScatterView 控件。这里需要将ScatterView 的AllwoDrop 属性设为True,背景也要填充颜色,可设置为Transparent 透明,这样才能保证LibraryBar 中的组件可以拖拽到ScatterView 中。

                                                

     其次,为ScatterView 添加SurfaceDragDrop.Drop 事件用于处理拖拽的操作。在事件触发时,新建一个ScatterViewItem(newItem) 用于装载被拖动的图片组件。将e.Cursor.Data 转化为PhotoAlbum,借助FileName 属性新建MediaElement。将MediaElement(mediaItem)赋给newItem.Content,并通过GetPosition 获取到拖拽动作的位置作为newItem 在ScatterView 中的显示位置。

private void scatterView_Drop(object sender, SurfaceDragDropEventArgs e)  {      PhotoAlbum data = e.Cursor.Data as PhotoAlbum;            ScatterViewItem newItem = new ScatterViewItem();      MediaElement mediaItem = new MediaElement();      mediaItem.Source = new Uri(data.FileName);      newItem.Background = Brushes.Transparent;      newItem.Content = mediaItem;      newItem.Center = e.Cursor.GetPosition(scatterView);            scatterView.Items.Add(newItem);  }

     这样我们就实现了将LibraryBar 中的组件拖拽到ScatterView。MSDN 上也提供了文档供大家参考:Using the Microsoft Surface Drag-and-Drop Framework

WPF 与Surface 2.0 SDK 亲密接触–LibraryBar 篇

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:WPF与Surface2.0SDK亲密接触–LibraryBar篇-创新互联
分享URL:http://myzitong.com/article/digogs.html