win8開發(8)——獲取設備信息

本帖最後由 白西 於 2012-11-2 15:24 編輯

如何獲得當前機器上的設備ID,名稱以及縮略圖,我們需要用到一個類——DeviceInformation類(位於 Windows.Devices.Enumeration命名空間)。
使用方法是這樣的:
1、通過DeviceInformation.FindAllAsync靜態方法獲得一個DeviceInformationCollection集合。
2、將這個集合foreach一下就可以訪問其中各成員,這個相信不難明白。
3、DeviceInformation對象的Id屬性獲取設備的標識符。
4、Name屬性獲取設備名稱。
5、GetThumbnailAsync方法獲取設備的縮略圖。

看起來是不是很簡單呢?下面,我們用一個實例來深化一下。
1、啓動VS,新建項目(此處省略38個字)。
2、在主頁的根Grid中聲明一個ListView,用來顯示獲取到的設備信息。XAML如下:


  • <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  •     <ListView Name="lvDevices" Margin="10" SelectionMode="None">  
  •         <ListView.ItemsPanel>  
  •             <ItemsPanelTemplate>  
  •                 <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="3" ItemWidth="420"/>  
  •             </ItemsPanelTemplate>  
  •         </ListView.ItemsPanel>  
  •     </ListView>  
  • </Grid>  
4、在XAML文檔視圖中右擊,從彈出的菜單中選擇“查看代碼”,切換到C#代碼視圖,然後在
重寫的OnNavigatedTo方法中加入下面代碼:

  • protected async override void OnNavigatedTo(NavigationEventArgs e)  
  • {  
  •     DeviceInformationCollection dcl = await DeviceInformation.FindAllAsync();  
  •     this.lvDevices.Items.Clear();  
  •     foreach (var item in dcl)  
  •     {  
  •         // 項內容佈局   
  •         Grid itemRoot = new Grid();  
  •         itemRoot.Margin = new Thickness(15);  
  •         itemRoot.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });  
  •         itemRoot.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });  
  •         // 取得圖標   
  •         DeviceThumbnail thumb = await item.GetThumbnailAsync();  
  •         BitmapImage bmp = new BitmapImage();  
  •         thumb.Seek(0);  
  •         bmp.SetSource(thumb);  
  •         // 顯示圖像   
  •         Image myImage = new Image();  
  •         myImage.Width = 80;  
  •         myImage.Height = 80;  
  •         myImage.Stretch = Stretch.Uniform;  
  •         myImage.Margin = new Thickness(10);  
  •         myImage.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;  
  •         myImage.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top;  
  •         myImage.Source = bmp;  
  •         Grid.SetColumn(myImage, 0);  
  •         itemRoot.Children.Add(myImage);  
  •         // 顯示文本   
  •         TextBlock textbl = new TextBlock();  
  •         textbl.TextWrapping = TextWrapping.Wrap;  
  •         Run myRunTitle = new Run();  
  •         myRunTitle.Text = item.Name;  
  •         myRunTitle.FontSize = 20;  
  •         myRunTitle.FontWeight = FontWeights.Bold;  
  •         textbl.Inlines.Add(myRunTitle);  
  •         textbl.Inlines.Add(new LineBreak());  
  •         Run runID = new Run() { Text = item.Id };  
  •         textbl.Inlines.Add(runID);  
  •         Grid.SetColumn(textbl, 1);  
  •         itemRoot.Children.Add(textbl);  
  •   
  •         ListViewItem lvItem = new ListViewItem();  
  •         //lvItem.Width = 600;   
  •         lvItem.Content = itemRoot;  
  •         // 將項添加到ListView中   
  •         this.lvDevices.Items.Add(lvItem);  
  •     }  
  • }  

面代碼我簡單說一下,如果熟悉WPF的朋友,相信下面的內容你不用看了。由於要顯示的內容

有點複雜,包含縮略圖和文本,因此用一個Grid作爲ListViewItem的內容。

這個Grid劃分爲兩列,第一列放Image控件,第二列放一個用顯示文本信息的TextBlock控件。

在TextBlock中,用到了Document對象,兩塊文本均爲Run對象,中間通過一個LineBreak換行。

第一個Run顯示設備名稱,加粗;第二個Run沒有任何修飾,普通文本,顯示ID。
下圖是運行結果。


1.png
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章