You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3中InkToolbar是否可用?为何Figma有但NuGet包未提供?

WinUI 3中InkToolbar控件的问题解答

关于控件缺失的情况

确实,当前WindowsAppSDK的WinUI 3包中没有原生的InkToolbar控件。这个控件原本属于UWP框架,截至目前微软尚未将其移植到WinUI 3体系中。

Figma设计文件包含该控件的原因

WinUI 3的Figma设计资源是基于完整的Windows设计系统构建的,涵盖了从UWP到WinUI的全量控件设计规范,目的是让设计师能基于统一的视觉语言完成界面设计,哪怕部分控件暂时没有在WinUI 3中提供原生实现。

在WinUI 3中实现类似功能的方案

方案1:通过XAML Islands嵌入UWP的InkToolbar

这是最直接的方式,利用XAML Islands将UWP的InkToolbar控件集成到WinUI 3应用中:

  1. 在项目中安装Microsoft.Toolkit.WinUI.UI.Controls NuGet包(该包封装了XAML Islands的集成逻辑)
  2. 在XAML页面中添加UWP控件的命名空间:
    xmlns:uwp="using:Windows.UI.Xaml.Controls"
    
  3. 配合WinUI 3的InkCanvas使用该控件:
    <Grid>
        <uwp:InkToolbar x:Name="inkToolbar" VerticalAlignment="Top" />
        <InkCanvas x:Name="inkCanvas" />
    </Grid>
    
  4. 在代码后台关联控件:
    inkToolbar.TargetInkCanvas = inkCanvas;
    

方案2:自定义实现工具栏

如果不想依赖XAML Islands,可以基于WinUI 3的基础控件自行构建功能类似的工具栏:

  • 使用ToggleButton实现画笔、橡皮擦等工具切换
  • 用ColorPicker提供颜色选择功能
  • 绑定控件事件到InkCanvas的InkPresenter属性,实现对应功能,示例:
    // 切换到画笔模式
    private void PenButton_Click(object sender, RoutedEventArgs e)
    {
        inkCanvas.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Touch;
        inkCanvas.InkPresenter.StrokeInput.EraseMode = InkPresenterEraseMode.None;
    }
    
    // 切换到橡皮擦模式
    private void EraserButton_Click(object sender, RoutedEventArgs e)
    {
        inkCanvas.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Touch;
        inkCanvas.InkPresenter.StrokeInput.EraseMode = InkPresenterEraseMode.StrokeErase;
    }
    

方案3:使用第三方UI库

部分第三方WinUI控件库已经实现了风格匹配的InkToolbar替代控件,可以根据需求选择合适的库集成。

内容的提问来源于stack exchange,提问作者Blondie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:12:11