1. 程式人生 > >WPF InkCanvas EditingMode為Select時 在其選擇時各種事件中撤銷Select模式的方法

WPF InkCanvas EditingMode為Select時 在其選擇時各種事件中撤銷Select模式的方法

internal span zed clas system system.in 處理方式 select 圖片

InkCanvas有多種輸入模式。

通過InkCanvasEditingMode來進行對其調整

分別是

  • None=0// 忽略鼠標和手寫筆輸入

  • Ink = 1// 允許用戶繪制批註,默認模式。使用鼠標或者手寫筆繪圖時,會繪制筆畫

  • GestureOnly = 2// 不遠許用戶繪制筆畫批註,但會關註預先定義的特定姿勢,由System.Windows.Ink.ApplicationGesture定義筆勢

  • InkAndGesture = 3// 允許用戶繪制壁畫批註,也可以識別預先定義的姿勢

  • Select = 4// 允許用戶選擇保存在Children集合中的元素,要選擇一個元素用戶必須單機該元素或者拖動套索選擇該元素,一旦選擇一個元素就可以移動該元素,改變其尺寸或將其刪除

  • EraseByPoint = 5// 擦除鼠標選中的筆畫

  • EraseByStroke = 6// 擦除選中的一筆,開始到結束都會擦除

在Select模式下,會有6個事件

這其中,有三個ing尾綴的事件,三個ed尾綴的事件,ing事件實在ed事件之前觸發。

分別是

ing

  1. SelectionChanging
  2. SelectionMoving
  3. SelectionResizing

ed

  1. SelectionChanged
  2. SelectionMoved
  3. SelectionResized

介紹完之後,主要說明如何撤銷選擇模式

如果直接在

以上6種事件修改,會直接報錯

   private void T_SelectionChanged(object sender, EventArgs e)
        {
            t.EditingMode = InkCanvasEditingMode.Ink;
         
        }

錯誤為

System.InvalidCastException:“無法將類型為“MS.Internal.Ink.SelectionEditor”的對象強制轉換為類型“MS.Internal.Ink.StylusEditingBehavior”。”

技術分享圖片

處理方式是 新建線程來修改

        private void T_SelectionChanged(object sender, EventArgs e)
        {
           
            new Thread(ts).Start();
        }
        private void ts()
        {
            t.Dispatcher.Invoke(() => { t.EditingMode = InkCanvasEditingMode.Ink; });
        }

WPF InkCanvas EditingMode為Select時 在其選擇時各種事件中撤銷Select模式的方法