zero0r1

导航

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;
        }
    }
}

 

效果图:

posted on 2017-09-11 22:32  zero0r1  阅读(475)  评论(0编辑  收藏  举报