重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop
原文:重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop

[源码下载]

重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop

作者:webabcd

介绍
重新想象 Windows 8 Store Apps 之 输入

  • 输入设备的相关信息
  • SIP(Soft Input Panel)的应用
  • Tab 键导航
  • Pointer - 指针,鼠标
  • Tap - 触摸
  • Drag 和 Drop

示例
1、演示如何获取输入设备的相关信息
Input/InputDeviceInfo.xaml

<Pagex:Class="XamlDemo.Input.InputDeviceInfo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><Grid Margin="120 0 0 0"><ScrollViewer Margin="0 0 10 10"><TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap" /></ScrollViewer></Grid></Grid>
</Page>

Input/InputDeviceInfo.xaml.cs

/** 演示如何获取输入设备的相关信息*/using System;
using Windows.Devices.Input;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;namespace XamlDemo.Input
{public sealed partial class InputDeviceInfo : Page{public InputDeviceInfo(){this.InitializeComponent();}protected override void OnNavigatedTo(NavigationEventArgs e){// 获取鼠标设备的相关信息MouseCapabilities mouseCapabilities = new MouseCapabilities();lblMsg.Text = "MouseCapabilities.MousePresent: " + mouseCapabilities.MousePresent; // 是否存在鼠标lblMsg.Text += Environment.NewLine;lblMsg.Text += "MouseCapabilities.HorizontalWheelPresent: " + mouseCapabilities.HorizontalWheelPresent; // 是否有水平滚轮lblMsg.Text += Environment.NewLine;lblMsg.Text += "MouseCapabilities.VerticalWheelPresent: " + mouseCapabilities.VerticalWheelPresent; // 是否有垂直滚轮lblMsg.Text += Environment.NewLine;lblMsg.Text += "MouseCapabilities.SwapButtons: " + mouseCapabilities.SwapButtons; // 是否交换了左右按钮lblMsg.Text += Environment.NewLine;lblMsg.Text += "MouseCapabilities.NumberOfButtons: " + mouseCapabilities.NumberOfButtons; // 鼠标上的按钮数量lblMsg.Text += Environment.NewLine;lblMsg.Text += Environment.NewLine;// 获取硬件键盘设备的相关信息KeyboardCapabilities keyboardCapabilities = new KeyboardCapabilities();lblMsg.Text += "KeyboardCapabilities.KeyboardPresent: " + keyboardCapabilities.KeyboardPresent; // 是否存在硬件键盘lblMsg.Text += Environment.NewLine;lblMsg.Text += Environment.NewLine;// 获取触摸设备的相关信息TouchCapabilities touchCapabilities = new TouchCapabilities();lblMsg.Text += "TouchCapabilities.TouchPresent: " + touchCapabilities.TouchPresent; // 是否存在触摸设备lblMsg.Text += Environment.NewLine;lblMsg.Text += "TouchCapabilities.Contacts: " + touchCapabilities.Contacts; // 触摸设备所支持的多点触摸的点数lblMsg.Text += Environment.NewLine;lblMsg.Text += Environment.NewLine;// 获取 Pointer 设备(Touch, Pen, Mouse)的相关信息var pointerDeviceList = PointerDevice.GetPointerDevices();int displayIndex = 0;foreach (PointerDevice pointerDevice in pointerDeviceList){displayIndex++;lblMsg.Text += "Pointer Device Index: " + displayIndex;lblMsg.Text += Environment.NewLine;lblMsg.Text += "PointerDevice.PointerDeviceType: " + pointerDevice.PointerDeviceType; // Pointer 类型(Touch, Pen, Mouse)lblMsg.Text += Environment.NewLine;lblMsg.Text += "PointerDevice.IsIntegrated: " + pointerDevice.IsIntegrated; // 是否是集成设备lblMsg.Text += Environment.NewLine;lblMsg.Text += "PointerDevice.MaxContacts: " + pointerDevice.MaxContacts; // 最大的同时触摸点数lblMsg.Text += Environment.NewLine;lblMsg.Text += "PointerDevice.PhysicalDeviceRect: " + pointerDevice.PhysicalDeviceRect; // 物理设备的 RectlblMsg.Text += Environment.NewLine;lblMsg.Text += "PointerDevice.ScreenRect: " + pointerDevice.ScreenRect; // Pointer 设备所支持的屏幕的 RectlblMsg.Text += Environment.NewLine;lblMsg.Text += Environment.NewLine;}}}
}

2、演示 SIP(Soft Input Panel)的应用
Input/Keyboard/Demo.xaml

<Pagex:Class="XamlDemo.Input.Keyboard.Demo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input.Keyboard"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><!--TextBox - 文本输入框IsTextPredictionEnabled - 是否启用“自动完成”,默认值 trueIsSpellCheckEnabled - 是否启用拼音检查,默认值 false--><TextBox IsTextPredictionEnabled="True" IsSpellCheckEnabled="True" Margin="0 0 10 0" /><!--InputScope - 限制 SIP 的输入范围,即设置 SIP 的布局方式--><TextBox InputScope="Default" Margin="0 10 10 0"  /><TextBox KeyDown="TextBox_KeyDown_1" Margin="0 10 10 0"><TextBox.InputScope><InputScope><InputScope.Names><InputScopeName NameValue="TelephoneNumber" /></InputScope.Names></InputScope></TextBox.InputScope></TextBox><!--对于 ReadOnly 的输入框,即使获取到焦点也不会弹出虚拟键盘--><TextBox Name="txtReadOnly" IsReadOnly="True" Margin="0 10 10 0" /></StackPanel></Grid>
</Page>

Input/Keyboard/Demo.xaml.cs

/** 演示 SIP(Soft Input Panel)的应用* * 注:* 1、TextBox, RichEditBox, PasswordBox 等文本输入框获取焦点后,会自动显示虚拟键盘(对于 ReadOnly 的输入框,即使获取到焦点也不会弹出虚拟键盘)* 2、键盘相关的事件有 KeyDown 和 KeyUp* 3、WinRT 的 SIP 支持的 InputScope 类型详见 Windows.UI.Xaml.Input.InputScopeNameValue 枚举* *  * Windows.UI.ViewManagement.InputPane - 软键盘面板*     GetForCurrentView() - 获取当前的 InputPane 对象*     OccludedRect - 软键盘面板所占用的矩形区域*     Hiding - 软键盘隐藏时触发的事件*     Showing - 软键盘显示时触发的事件 * * * 如果需要检测当前某个虚拟按键的状态,可以用如下方法:* CoreWindow.GetAsyncKeyState(VirtualKey virtualKey)* CoreWindow.GetKeyState(VirtualKey virtualKey)* * 监测键盘事件可以通过 CoreWindow.KeyDown 事件* 关于 CoreWindow 的更多内容请参见:Feature/CoreDemo.xaml.cs*/using System;
using Windows.System;
using Windows.UI.Core;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;namespace XamlDemo.Input.Keyboard
{public sealed partial class Demo : Page{public Demo(){this.InitializeComponent();this.Loaded += Demo_Loaded;}async void Demo_Loaded(object sender, RoutedEventArgs e){// 检测虚拟按键当前的状态CoreVirtualKeyStates capitalLockState = Windows.UI.Xaml.Window.Current.CoreWindow.GetKeyState(VirtualKey.CapitalLock);if (capitalLockState == CoreVirtualKeyStates.Locked){await new MessageDialog("您的键盘处于“大写”输入状态").ShowAsync();}}private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e){// 判断用户是否按下了 SIP 上的回车键if (e.Key == VirtualKey.Enter){// 将焦点移出文本输入框,虚拟键盘会自动隐藏
                txtReadOnly.Focus(FocusState.Programmatic);}}}
}

3、演示 Control 的 Tab 导航相关属性的应用
Input/Keyboard/TabNavigation.xaml

<Pagex:Class="XamlDemo.Input.Keyboard.TabNavigation"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input.Keyboard"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><!--演示 Control 的 Tab 导航相关属性的应用Control - 控件TabIndex - Tab 导航的顺序,默认值为 int.MaxValueIsTabStop - 是否加入 Tab 导航,默认值为 trueTabNavigation - Tab 导航的工作方式。经测试,没什么效果--><Button Content="button 1" TabIndex="3" TabNavigation="Once" /><Button Content="button 2" Margin="0 10 0 0" TabIndex="1" /><Button Content="button 3" Margin="0 10 0 0" IsTabStop="False" /><Button Content="button 4" Margin="0 10 0 0" TabIndex="4" /><Button Content="button 5" Margin="0 10 0 0" TabIndex="2" /><ListBox Width="200" Height="300" Margin="0 10 0 0" HorizontalAlignment="Left" VerticalAlignment="Top"><ListBox.Items><ListBoxItem Content="ListBoxItem1" /><ListBoxItem Content="ListBoxItem2" /><ListBoxItem Content="ListBoxItem3" /></ListBox.Items></ListBox></StackPanel></Grid>
</Page>

4、演示 Pointer 相关事件的应用
Input/Touch/Pointer.xaml

<Pagex:Class="XamlDemo.Input.Touch.Pointer"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input.Touch"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><Grid Margin="120 0 0 0"><Rectangle Name="rectangle" Width="400" Height="100" Fill="Orange" HorizontalAlignment="Left" VerticalAlignment="Top" /><ScrollViewer Margin="0 110 0 10" HorizontalAlignment="Stretch" VerticalAlignment="Top"><TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap" /></ScrollViewer></Grid></Grid>
</Page>

Input/Touch/Pointer.xaml.cs

/** 演示 Pointer 相关事件的应用* * * PointerRoutedEventArgs - 指针路由事件的事件参数*     OriginalSource - 引发此路由事件的对象*     Handled - 是否将事件标记为已处理*     KeyModifiers - 获取当前按下的辅助键(Windows.System.VirtualKeyModifiers 枚举)*         None, Control, Menu, Shift, Windows*     Pointer - 获取 Pointer 对象*         Pointer.PointerDeviceType - 指针设备的类型(Touch, Pen, Mouse)*         Pointer.PointerId - 指针标识,可以根据此属性来区分多点触摸场景下的不同指针*     GetCurrentPoint(UIElement relativeTo) - 返回当前指针相对于指定元素的 PointerPoint 对象*         PointerPoint.Position -  指针的位置*         PointerPoint.Properties - 返回 PointerPointProperties 对象,有一堆 PointerPoint 的相关属性*     GetIntermediatePoints(UIElement relativeTo) - 返回与此事件关联的 PointerPoint 的中间值(平均值)集合*    * * HoldingRoutedEventArgs - Holding 路由事件的事件参数*     OriginalSource - 引发此路由事件的对象*     Handled - 是否将事件标记为已处理*     PointerDeviceType - 指针设备的类型(Touch, Pen, Mouse)*     GetPosition(UIElement relativeTo) - 返回当前指针相对于指定元素的位置*     HoldingState - Holding 状态(Windows.UI.Input.HoldingState 枚举)*         Started, Completed, Canceled*         * * UIElement.CapturePointer(Pointer value) - 捕获此 UIElement 上的指针,即在 UIElement 之外也可以响应 PointerReleased 事件* UIElement.ReleasePointerCapture(Pointer value) - 释放对此 UIElement 上的指针的捕获* UIElement.ReleasePointerCaptures() - 释放全部指针的捕获* * * 注:通过 CoreWindow.PointerCursor 设置指针光标的样式*/using System;
using Windows.UI.Core;
using Windows.UI.Input;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Shapes;namespace XamlDemo.Input.Touch
{public sealed partial class Pointer : Page{public Pointer(){this.InitializeComponent();// 修改指针光标的样式Windows.UI.Xaml.Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Cross, 1);rectangle.PointerEntered += rectangle_PointerEntered;rectangle.PointerExited += rectangle_PointerExited;rectangle.PointerPressed += rectangle_PointerPressed;rectangle.PointerReleased += rectangle_PointerReleased;rectangle.PointerMoved += rectangle_PointerMoved;rectangle.PointerWheelChanged += rectangle_PointerWheelChanged;rectangle.PointerCanceled += rectangle_PointerCanceled;rectangle.PointerCaptureLost += rectangle_PointerCaptureLost;rectangle.Holding += rectangle_Holding;}void rectangle_Holding(object sender, HoldingRoutedEventArgs e){lblMsg.Text += "Holding";lblMsg.Text += Environment.NewLine;}void rectangle_PointerCaptureLost(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerCaptureLost " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;}void rectangle_PointerCanceled(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerCanceled " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;}void rectangle_PointerWheelChanged(object sender, PointerRoutedEventArgs e){// 判断鼠标滚轮的滚动方向lblMsg.Text += "PointerWheelChanged " + e.GetCurrentPoint(null).Properties.MouseWheelDelta;lblMsg.Text += Environment.NewLine;}void rectangle_PointerMoved(object sender, PointerRoutedEventArgs e){// lblMsg.Text += "PointerMoved " + e.Pointer.PointerId;// lblMsg.Text += Environment.NewLine;
        }void rectangle_PointerReleased(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerReleased " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;((Rectangle)sender).ReleasePointerCapture(e.Pointer);}void rectangle_PointerPressed(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerPressed " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;bool hasCapture = ((Rectangle)sender).CapturePointer(e.Pointer);lblMsg.Text += "Got Capture: " + hasCapture;lblMsg.Text += Environment.NewLine;PointerPointProperties props = e.GetCurrentPoint(null).Properties;lblMsg.Text += "接触区域的边框: " + props.ContactRect.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "原始输入的边框: " + props.ContactRectRaw.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "触笔设备的筒状按钮是否按下: " + props.IsBarrelButtonPressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否已由指针设备取消: " + props.IsCanceled.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自橡皮擦: " + props.IsEraser.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自滚轮: " + props.IsHorizontalMouseWheel.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针是否在触摸屏的范围内: " + props.IsInRange.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "是否是反转的值: " + props.IsInverted.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自鼠标左键: " + props.IsLeftButtonPressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自鼠标中键: " + props.IsMiddleButtonPressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自鼠标右键: " + props.IsRightButtonPressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "输入是否来自主要指针: " + props.IsPrimary.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "第一个扩展按钮的按下状态: " + props.IsXButton1Pressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "第二个扩展按钮的按下状态: " + props.IsXButton2Pressed.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针施加到触摸屏上的力度(0.0-1.0): " + props.Pressure.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "触摸是否被拒绝了: " + props.TouchConfidence.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针状态的更改类型: " + props.PointerUpdateKind.ToString(); // PointerUpdateKind 枚举:LeftButtonPressed, LeftButtonReleased 等等lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针设备相关的 Orientation: " + props.Orientation.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针设备相关的 Twist: " + props.Twist.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针设备相关的 XTilt: " + props.XTilt.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "指针设备相关的 YTiltYTilt: " + props.YTilt.ToString();lblMsg.Text += Environment.NewLine;// 输入设备相关// props.HasUsage(uint usagePage, uint usageId)// props.GetUsageValue(uint usagePage, uint usageId)
        }void rectangle_PointerExited(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerExited " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;}void rectangle_PointerEntered(object sender, PointerRoutedEventArgs e){lblMsg.Text += "PointerEntered " + e.Pointer.PointerId;lblMsg.Text += Environment.NewLine;}}
}

5、演示 Tap 相关事件的应用
Input/Touch/Tap.xaml

<Pagex:Class="XamlDemo.Input.Touch.Tap"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input.Touch"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><Rectangle Name="rectangle" Width="400" Height="100" Fill="Orange" HorizontalAlignment="Left" /><TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap" Margin="0 10 0 0" /></StackPanel></Grid>
</Page>

Input/Touch/Tap.xaml.cs

/** 演示 Tap 相关事件的应用* * * TappedRoutedEventArgs - Tap 路由事件的事件参数* DoubleTappedRoutedEventArgs - DoubleTap 路由事件的事件参数* RightTappedRoutedEventArgs - RightTap 路由事件的事件参数*     OriginalSource - 引发此路由事件的对象*     Handled - 是否将事件标记为已处理*     PointerDeviceType - 指针设备的类型(Touch, Pen, Mouse)*     GetPosition(UIElement relativeTo) - 返回当前指针相对于指定元素的位置* * * HoldingRoutedEventArgs - Holding 路由事件的事件参数*     OriginalSource - 引发此路由事件的对象*     Handled - 是否将事件标记为已处理*     PointerDeviceType - 指针设备的类型(Touch, Pen, Mouse)*     GetPosition(UIElement relativeTo) - 返回当前指针相对于指定元素的位置*     HoldingState - Holding 状态(Windows.UI.Input.HoldingState 枚举)*         Started, Completed, Canceled*/using System;
using Windows.UI.Xaml.Controls;namespace XamlDemo.Input.Touch
{public sealed partial class Tap : Page{public Tap(){this.InitializeComponent();rectangle.IsTapEnabled = true; // 默认值就是 truerectangle.IsDoubleTapEnabled = true; // 默认值就是 truerectangle.IsRightTapEnabled = true; // 默认值就是 truerectangle.IsHoldingEnabled = true; // 默认值就是 true
rectangle.Tapped += rectangle_Tapped;rectangle.DoubleTapped += rectangle_DoubleTapped;rectangle.RightTapped += rectangle_RightTapped;rectangle.Holding += rectangle_Holding;}void rectangle_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e){lblMsg.Text += "Holding";lblMsg.Text += Environment.NewLine;}void rectangle_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e){lblMsg.Text += "RightTapped";lblMsg.Text += Environment.NewLine;}void rectangle_DoubleTapped(object sender, Windows.UI.Xaml.Input.DoubleTappedRoutedEventArgs e){lblMsg.Text += "DoubleTapped";lblMsg.Text += Environment.NewLine;}void rectangle_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e){lblMsg.Text += "Tapped";lblMsg.Text += Environment.NewLine;}}
}

6、关于 AllowDrop, Drop, DragEnter, DragOver, DragLeave
Input/Touch/DragDrop.xaml

<Pagex:Class="XamlDemo.Input.Touch.DragDrop"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Input.Touch"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap"><Run>关于 AllowDrop, Drop, DragEnter, DragOver, DragLeave 等详见:Controls/GridView/DragItem.xaml</Run></TextBlock></StackPanel></Grid>
</Page>

OK
[源码下载]

posted on 2014-03-09 15:32 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3590100.html

重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop...相关推荐

  1. 重新想象 Windows 8 Store Apps (61) - 通信: http, oauth

    重新想象 Windows 8 Store Apps (61) - 通信: http, oauth 原文:重新想象 Windows 8 Store Apps (61) - 通信: http, oauth ...

  2. 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom...

    原文:重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom [源码下载] ...

  3. 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...

    原文:重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口 [源码下载] 重新想象 Windows 8 Store Apps (27) - ...

  4. 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换...

    重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换 原文: ...

  5. 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础

    原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...

  6. 重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider...

    重新想象 Windows 8 Store Apps (4) - 控件之提示控件: ProgressRing; 范围控件: ProgressBar, Slider 原文:重新想象 Windows 8 S ...

  7. 重新想象 Windows 8 Store Apps (59) - 锁屏

    原文:重新想象 Windows 8 Store Apps (59) - 锁屏 [源码下载] 重新想象 Windows 8 Store Apps (59) - 锁屏 作者:webabcd 介绍 重新想象 ...

  8. C# WPD (windows portable devices) 检测WPD设备 获取设备信息

    最近用c#写过一个WPD的列子,主要是参考 c++的实例, 在 windows sdk 中 ( C:/Program Files/Microsoft SDKs/Windows/v7.0/Samples ...

  9. Unity Game Starter Kit for Windows Store and Windows Phone Store games

    原地址:http://digitalerr0r.wordpress.com/2013/09/30/unity-game-starter-kit-for-windows-store-and-window ...

最新文章

  1. Centos DNS服务器搭建
  2. Nginx静态资源压缩实战内容介绍
  3. “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)
  4. 第二课 决策树与随机森林
  5. opencv中cvSetCaptureProperty定位不准的原因及解决(转载)
  6. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
  7. Vue项目—请求函数的封装
  8. 额度降为0剩下欠款怎么办?
  9. fw325r虚拟服务器,fw325r无线路由器设置
  10. couchbase java 手册_couchBase在java中使用的基本知识
  11. 国外科研论文搜索网站汇总
  12. Mysql 创建数据库\添加用户\用户授权
  13. mysql union 慢_mysql查询慢的原因和解决方案
  14. chrome 切换标签页快捷键_如何在Chrome浏览器中切换标签页
  15. 软件工程_东师站_总结
  16. 新建的工程没有Products和Frameworks文件夹
  17. arduino密码锁代码
  18. 从X86架构来源开始:谈CPU
  19. ExecuteMethod
  20. NYOJ 79 导弹拦截

热门文章

  1. 图像傅里叶变换,幅度谱,相位谱
  2. selenium选中某个控件敲击键盘
  3. Z变换(2020.10.21)
  4. Mysql data type
  5. pcie的ack/nak机制
  6. 5.1 HTML5表单的创建
  7. WinForm数据源分页技术
  8. Asp.net MVC3 一语道破
  9. 使用struts 2 获取服务器数据 ongl表达式 标签
  10. 写在园子里的第一篇BLOG