中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WPF 與Surface 2.0 SDK 親密接觸–LibraryBar 篇

發布時間:2020-06-23 16:34:15 來源:網絡 閱讀:368 作者:gnie 欄目:開發技術

LibraryBar 介紹

     與LibraryStack 類似LibraryBar 也屬于ItemsControl,在LibraryBar 里的組件會以水平平鋪方式展示,并且也可以對其中的組件進行按組分類。同樣LibraryBar 也是默認支持拖拽操作。

     下面的例子將通過LibraryBar 展示一組Sample 圖片。首先,仍然可以使用DataTemplate 作為LibraryBar 的樣式模板用來綁定圖片資源。接下來在Grid 中添加LibraryBar 控件,并設置好ItemTemplate 數據模板。我們可以通過修改Rows 參數調整LibraryBar 中組件顯示的行數。

<s:SurfaceWindow x:Class="Demo.SurfaceWindow1"      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      xmlns:s="http://schemas.microsoft.com/surface/2008"      Title="LibraryBar"  >      <s:SurfaceWindow.Resources>          <DataTemplate x:Key="LibraryBarItemTemplate">              <Image Source="{Binding}"/>          </DataTemplate>      </s:SurfaceWindow.Resources>        <Grid>          <s:LibraryBar x:Name="mLibraryBar" Rows="3"
ItemTemplate="{StaticResource LibraryBarItemTemplate}"/> </Grid> </s:SurfaceWindow>

     為LiraryBar 添加圖片數據源。注意,同樣不能將圖片string[] 數組直接賦給LiraryBar,需要借助ObservableCollection。

string imagesPath = @"C:\Users\Public\Pictures\Sample Pictures\";  try  {      string[] files = System.IO.Directory.GetFiles(imagesPath, "*.jpg");      ObservableCollection<string> items = new ObservableCollection<string>(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 稍作修改,添加圖片標簽<Label>。

<s:SurfaceWindow.Resources>      <DataTemplate x:Key="LibraryBarItemTemplate">          <Grid>              <Image Source="{Binding Bitmap}"/>              <Label FontSize="14" Content="{Binding Label}"/>          </Grid>      </DataTemplate>  </s:SurfaceWindow.Resources>    <Grid>      <s:LibraryBar x:Name="mLibraryBar" Rows="2"                    ItemTemplate="{StaticResource LibraryBarItemTemplate}"/>  </Grid>  

     依據GroupName 作為分組的方式,為GroupDescriptions 默認的集合瀏覽方式添加PropertyGroupDescription 對象,并賦給ItemsSource 屬性。

ObservableCollection<PhotoAlbum> items = new ObservableCollection<PhotoAlbum>();  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 中。

<Grid>      <s:ScatterView x:Name="scatterView" s:SurfaceDragDrop.Drop="scatterView_Drop"                     AllowDrop="True" Background="Transparent">          <s:ScatterViewItem Width="500" Height="300">              <s:LibraryBar x:Name="mLibraryBar" Rows="2"                             ItemTemplate="{StaticResource LibraryBarItemTemplate}"/>          </s:ScatterViewItem>      </s:ScatterView>  </Grid>  

     其次,為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 篇

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌乐县| 邻水| 阿图什市| 项城市| 凌云县| 泸溪县| 金寨县| 十堰市| 旌德县| 潞西市| 瑞金市| 历史| 始兴县| 山阴县| 汨罗市| 安吉县| 西林县| 沾益县| 哈巴河县| 神农架林区| 习水县| 两当县| 兴隆县| 峡江县| 榆树市| 汽车| 香格里拉县| 福贡县| 来凤县| 榕江县| 莲花县| 阿瓦提县| 同仁县| 罗甸县| 偃师市| 丰镇市| 吴堡县| 茌平县| 泽库县| 兰溪市| 保康县|