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应用中:
- 在项目中安装
Microsoft.Toolkit.WinUI.UI.ControlsNuGet包(该包封装了XAML Islands的集成逻辑) - 在XAML页面中添加UWP控件的命名空间:
xmlns:uwp="using:Windows.UI.Xaml.Controls" - 配合WinUI 3的
InkCanvas使用该控件:<Grid> <uwp:InkToolbar x:Name="inkToolbar" VerticalAlignment="Top" /> <InkCanvas x:Name="inkCanvas" /> </Grid> - 在代码后台关联控件:
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
相关产品推荐
相关产品推荐

