本帖最后由 白西 于 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。 下图是运行结果。 |