本帖最後由 白西 於 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。
下圖是運行結果。
|