InkCanvas 介绍
WPF 提供了一个类似 Canvas 的控件, 名为 LnkCanvas, 中文名为墨水面板, 主要用户手持式设备输入,
如: 平板电脑, 手写笔. 虽然与 Canvas 名称相似, 但是 InkCanvas 并不派生自 Canvas, 而是派生自 FrameworkElement 基类.
与 Canvas类似, InkCanvas 使用坐标点在定位其上的子元素,
同样定义了 Canvas.Top, Canvas.Left, Canvas.Right, Canvas.Bottom 这个4个附加属性. InkCanvas 中还附加着一下两个
子元素结合:
Children 集合:
用户保存任何元素. 与 Canvas 十分相似
Stocks 集合:
用户保存 System.Windows.Ink.Stock对象. 当鼠标和,手写笔在其上绘画时. 所有的 Stocks 都会被记录下来.
EXAMPLE:
<!--InkCanvas: 中文名为墨水板,主要用于手绘设备输入,也可以用鼠标代替输入 InkCanvas直接继承于FrameworkElement基类 --> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <Label>请选择一种InkCanvas模式:</Label> <ComboBox Name="cb1" SelectedIndex="0" SelectionChanged="cb1_SelectionChanged"> <ComboBoxItem>None</ComboBoxItem> <ComboBoxItem>Ink</ComboBoxItem> <ComboBoxItem>GestureOnly</ComboBoxItem> <ComboBoxItem>InkAndGesture</ComboBoxItem> <ComboBoxItem>Select</ComboBoxItem> <ComboBoxItem>EraseByPoint</ComboBoxItem> <ComboBoxItem>EraseByStroke</ComboBoxItem> </ComboBox> </StackPanel> <InkCanvas Name="inkCanvas" Background="AliceBlue" Grid.Row="1" EditingMode="None"> </InkCanvas> </Grid>
Background Code:
namespace WPFlayout { /// <summary> /// InkCanvasDemo.xaml 的交互逻辑 /// </summary> public partial class InkCanvasDemo : Window { public InkCanvasDemo() { InitializeComponent(); this.Width = 600; this.Height = 600; } private void cb1_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (inkCanvas == null) return; string itemText = ((ComboBoxItem)cb1.SelectedItem).Content.ToString(); inkCanvas.EditingMode = ParseEnum<InkCanvasEditingMode>(itemText); } public T ParseEnum<T>(string text) { if (!typeof(T).IsEnum) { throw new ArgumentException(typeof(T).ToString() + "这不是一个枚举值"); } T t = (T)Enum.Parse(typeof(T), text, true); return t; } } }
效果图: