【Win 10 應用開發】InkToolBar——塗鴉如此簡單


從WPF開始,就有個InkCanvas控件,封裝了數字墨跡處理相關的功能,Silverlight到Win 8 App,再到UWP應用,都有這個控件,所以,老周說了3688遍,凡是.net基礎扎實者,必懂WPF,凡是WPF基礎扎實者,必懂UWP。這叫一脈相承。

現在你明白為什么每次SDK發布后,老周不用學習就可以直接拿來用的原因了吧,因為老周認真學習過WPF唄,無他,如此而已。

Windows 10 一周年更新后,SDK也隨即更新,預覽版畢竟是未定型的,所以,在預覽版階段,老周並不打算寫什么,現在已正式推送了,因此,可以寫些什么了。

周年更新的其中一個玩意兒就是Windows Ink,這個工具內置在系統,方便塗鴉。

 

同時,Ink相關的功能也整合到 SDK 中,而且已經做好了封裝,直接拿來就能用,功能齊全。不信?咱們試試。

新建UWP項目,然后項目模板會創建一個主頁——MainPage.xaml,然后你輸入以下XAML即可。

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}"/>
        <InkCanvas Name="ink_cvs" Grid.Row="1" />
    </Grid>

很簡單,InkCanvas就不用多介紹了,它是一個面板,特點是你可以在它上面塗抹,就像大街上那些妖怪那樣,把化妝品往臉上亂塗,塗得人不像人,雞不像雞。

InkToolBar呢是一個現成的工具欄,你可以在上面選擇塗鴉的工具,比如圓珠筆、鉛筆、橡皮擦、尺子等,老周記得,這些都是老周上幼兒園時的必備套裝。唉,你想想,咱們那個時候,有個P手機電腦玩的,上學前玩泥人,上學后玩紙人,上課時玩橡皮擦,下課后玩粉筆擦。每次聽到羅大佑的《童年》,都別有一番滋味,童年時光多么美好,一轉眼,滄海已變成桑田,桑田又變成滄海,世事恆無常,且活且珍惜。

只要你聲明一個InkToolBar對象,無需寫任何代碼,它就能用了。哦,別忘了關鍵一點,那就是,你得讓InkToolBar找到InkCanvas實例,如此,這兩位Ink君才能協同工作,InkToolBar是郎才,InkCanvas是女貌,正所謂:水愛花姣美,花愛水清明。

要讓兩位Ink君走到一起,需要一個媒介——對了,InkToolBar有個TargetInkCanvas屬性,它用來指定相應的InkCanvas對象,記住了,這個屬性一定要賦值,不然找不到伴,InkToolBar會殉情的,鴛鴦怎能失伴飛呢,是吧。

 

看到沒,就是這么TMD簡單,一個塗鴉程序就完成,別看只聲明了兩個控件,現在它完全可以工作了。當然,別急着運行,因為我們還需要指定InkCanvas面板支持哪些操作,如鼠標、觸控筆、手觸等。好,切換到代碼視圖,在頁面類的構造函數中加入以下代碼:

        public MainPage()
        {
            this.InitializeComponent();

            this.ink_cvs.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Pen | Windows.UI.Core.CoreInputDeviceTypes.Touch;
        }

InputDeviceTypes屬性指定墨跡面板支持哪些設備操作,這里我就干脆鼠、筆、指全用上。

注意,這些代碼一定要寫在InitializeComponent方法調用之后,別犯那些低級錯誤,因為InitializeComponent方法調用后,XAML定義的UI才完成初始化,不然,控件實例都是null,你訪問個屁。

 

好了,現在OK了,運行一下吧。

 

是不是很是簡單呢?那么,如果我只希望顯示鉛筆、橡皮擦兩個按鈕,而不需要其他按鈕,那怎么做呢?沒事,很簡單,來,動手干一干。

首先,把InkToolBar的InitialControls屬性改為None。

   <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None"/>

然后,在InkToolBar元素下面手動定義各個按鈕。

        <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None">
            <InkToolbarPencilButton/>
            <InkToolbarEraserButton/>
        </InkToolbar>

 

再次運行一下,看看效果。

 

好,現在簡潔了不少。

InkToolBar還提供了 custom button,你可以自定義塗鴉按鈕,以擴展其功能。比如,我添加一個按鈕。

        <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None">
            ……
            <InkToolbarCustomToolButton Click="OnClick">
                <SymbolIcon Symbol="Folder" ToolTipService.ToolTip="sample" />
            </InkToolbarCustomToolButton>
        </InkToolbar>

得到以下視圖。

 

好了,關於InkToolBar,就聊到這里吧。

示例代碼下載地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM