
UI组件跨平台桌面应用【免费下载链接】Terminal.GuiCross Platform Terminal UI toolkit for .NET项目地址https://gitcode.com/gh_mirrors/te/Terminal.Gui点击查看免费下载Terminal.GuiCross Platform Terminal UI toolkit for .NET提供了一套相当完整的内置视图Views与控制组件体系用于快速构建终端用户界面。本文基于仓库文档 docfx/docs/views.md 展开逐一介绍这些内置视图的功能定位、关键特性与对应源码位置并结合仓库中的真实实现Terminal.Gui/Views 目录补充键盘/鼠标绑定、配置项与运行示例等细节帮助你根据场景准确选择组件并快速定位到源码进行深入阅读或二次开发。需要说明的是这份views.md文档本身是由 API 文档与OutputView工具自动生成的见 docfx/scripts/generate-views-doc.ps1可通过cd docfx ./scripts/generate-views-doc.ps1重新生成其中每个视图的描述即对应类型的 XML 文档摘要GIF 动图由tuirec录制。因此本文以该清单为骨架进一步补充从源码中提炼的实现细节与使用建议。一、基础交互控件Button、CheckBox、NumericUpDown、ProgressBar、SpinnerView这组控件负责最基础的点击、状态切换与进度反馈是绝大多数界面的积木。Button按钮功能当用户按下HotKey、Enter或Space或用鼠标点击时触发Accepting与Accepted事件。源码细节Terminal.Gui/Views/Button.cs默认键盘绑定为Space、Enter触发Command.Accept鼠标绑定为单击/双击/三击同样触发Accept。文本对齐默认居中Alignment.Center默认高度/宽度为Dim.Auto (DimAutoStyle.Text)即按钮尺寸随文本内容自适应。可通过View.HotKeySpecifier修改热键标记字符默认_例如标题写_Ok表示O为热键。支持IsDefault属性可充当所有同级 View 的默认Accept处理器将View.MouseHoldRepeat置为true可实现按住鼠标时持续触发Accepting。Button不触发Activating事件。CheckBox复选框功能展示一个复选框可在两态未选/已选与三态增加一个不确定/部分选中状态之间循环切换。常用于布尔选项或全部/部分/无的树形选择场景。源码位于 Terminal.Gui/Views/CheckBox.cs状态定义可参考 Terminal.Gui/Views/CheckState.cs。NumericUpDown 与 NumericUpDownT数值微调功能允许用户通过上/下按钮以鼠标或键盘方式增减数值。NumericUpDown面向intTerminal.Gui/Views/NumericUpDown.cs泛型版本NumericUpDownT以类型安全方式增减任意数值类型Terminal.Gui/Views/NumericUpDown.cs 同文件内定义。ProgressBar进度条功能以可视化方式指示某项活动的进度。源码位于 Terminal.Gui/Views/ProgressBar.cs关于各种样式双向、分块、连续等可参考示例 Examples/UICatalog/Scenarios/ProgressBarStyles.cs。SpinnerView加载指示器功能显示一个旋转字形或字形组合用于指示进行中的活动适合网络请求、后台任务等不确定耗时的场景。源码位于 Terminal.Gui/Views/SpinnerView 目录样式枚举可参见 Terminal.Gui/Views/SpinnerView/SpinnerStyle.cs该目录下还有SpinnerStyleExtensions等辅助类型。二、文本类控件Label、TextField、TextValidateField、TextView文本输入与展示是终端应用中使用频率最高的部分。Label标签功能显示描述性文本并与其在SubViews中的下一个 View 关联当用户按下匹配 LabelHotKey的热键时SubViews中的下一个 View 会被激活焦点转移。这是终端 UI 中实现Alt 快捷键聚焦到输入框的标准手法。源码位于 Terminal.Gui/Views/Label.cs。TextField单行文本框功能单行文本编辑器提供编辑能力与鼠标支持。源码位于 Terminal.Gui/Views/TextInput/TextField/TextField.cs。默认键盘绑定源码注释中完整列出按键动作Left/CtrlB光标左移Right/CtrlF光标右移Home/CtrlHome光标移到文本开头End/CtrlEnd/CtrlE光标移到文本末尾CtrlLeft/CtrlUp左移一个单词CtrlRight/CtrlDown右移一个单词Shift方向按方向扩展选区Delete/CtrlD删除光标处字符Backspace删除光标前字符CtrlK剪切光标到行尾的文本CtrlShiftK剪切光标到行首的文本CtrlDelete删除光标右侧单词CtrlBackspace删除光标左侧单词CtrlC/CtrlX/CtrlV复制 / 剪切 / 粘贴到剪贴板CtrlA全选CtrlShiftDelete删除全部文本CtrlZ/CtrlY撤销 / 重做Insert切换覆盖模式从源码看TextField还实现了IValuestring接口并具备自动补全Autocomplete默认TextFieldAutocomplete、历史记录HistoryText与自定义光标样式DefaultCursorStyle可通过TextFieldSettings配置。TextValidateField掩码/验证文本框功能带掩码的文本编辑器通过ITextValidateProvider校验输入。适合电话号码、日期、IP 地址等固定格式输入。源码位于 Terminal.Gui/Views/TextInput/TextValidateField.cs验证器接口见 Terminal.Gui/Views/TextInput/ITextValidateProvider.cs内置实现包括NetMaskedTextProvider.NET 掩码语法、TextRegexProvider正则校验等。TextView多行文本框功能功能齐全的多行文本编辑器支持选区、剪贴板、撤销等。源码位于 Terminal.Gui/Views/TextInput/TextView 目录底层文本模型为 Terminal.Gui/Views/TextInput/TextModel.cs。Notepad示例Examples/UICatalog/Scenarios/Notepad.cs展示了其作为文本编辑器的完整用法。三、选择类控件CheckBox 之外的选择器家族DropDownList 与 DropDownListT下拉框DropDownListTerminal.Gui/Views/DropDownList.cs是一个下拉/组合框控件将TextField与弹出式ListView结合用于从列表中选择项。泛型版本DropDownListTTerminal.Gui/Views/DropDownListTEnum.cs是类型安全的下拉控件用于从枚举中选择单个值提供与OptionSelectorT相同的接口但渲染为紧凑的下拉列表。ListView 与 ListViewT列表功能可滚动的数据列表每项均可被激活以执行动作。ListViewTerminal.Gui/Views/ListView 目录是非泛型版本ListViewT提供强类型的Value属性可直接返回底层ObservableCollectionT中选中的T对象。注意泛型版本的Value是从ObservableCollectionT派生的因此数据变更会实时反映到界面。线性选择器家族LinearRange 系列这组控件位于 Terminal.Gui/Views/LinearRange 目录围绕线性区间/线性多选设计LinearRangeViewBaseT,T1抽象基类为LinearSelectorT、LinearMultiSelectorT、LinearRangeT提供以键盘/鼠标导航的选项列表并通过IValueT暴露强类型当前值LinearSelector/LinearSelectorT从类型化选项列表中选择单个选项LinearMultiSelector/LinearMultiSelectorT从类型化列表中选择零个或多个选项LinearRange/LinearRangeT表示一段连续区间的选项当前值为LinearRangeSpanT其Kind可取None、LeftBounded、RightBounded、Closed四种此外LinearSelector、LinearMultiSelector、LinearRange三个非泛型便捷版本是各自泛型类对string的闭包closed overstring便于设计器场景如AllViewsTester与基于反射的实例化发现与创建。OptionSelector 与 OptionSelectorT单选功能以复选框列表形式展示选项但同一时刻仅能选中一项单选效果。泛型版本OptionSelectorT接受一个枚举类型提供类型安全的选择方式。源码位于 Terminal.Gui/Views/Selectors 目录。FlagSelector 与 FlagSelectorT多选标记功能用于展示并选择互不排斥的标志位FlagSelector基于字典Dictionary展示选项FlagSelectorT接受带[Flags]特性的枚举类型提供类型安全的多选。 源码同样位于 Terminal.Gui/Views/Selectors 目录SelectorBase是二者的抽象基类。CharMap字符映射表功能可滚动的 Unicode 码点映射视图便于浏览与挑选字符。源码位于 Terminal.Gui/Views/CharMap 目录其默认样式可由CharMapSettings配置Terminal.Gui/Configuration/Settings/CharMapSettings.cs。四、容器与窗口Window、FrameView、Dialog、TabsWindow重叠窗口功能带边框与可选标题的**重叠overlapped**容器。源码 Terminal.Gui/Views/Window.cs 显示其默认Arrangement ViewArrangement.Overlapped、BorderStyle默认单线DefaultBorderStyle可配置、使用 Base Scheme默认带阴影DefaultShadow。若需允许用户拖动/缩放窗口可通过调整View.Arrangement实现。FrameView框架容器功能带边框与可选标题的**非重叠non-overlapped**容器适合把相关控件分组。源码位于 Terminal.Gui/Views/FrameView.cs。Dialog 与 DialogT模态对话框功能底部带按钮的模态对话框按下按钮后Result被设置为按钮的索引0 基。源码 Terminal.Gui/Views/Dialog.cs 与 Terminal.Gui/Views/DialogTResult.csDialog是Dialogint的便捷子类适用于按下第几个按钮这种简单结果DialogT允许派生类返回自定义结果类型按钮通过AddButton或Buttons属性添加最后添加的按钮自动成为默认按钮Button.IsDefault按钮对齐由ButtonAlignment与ButtonAlignmentModes控制默认居中Pos.Center、Dim.Auto尺寸、使用Schemes.Dialog配色DefaultBorderStyle、DefaultShadow等可通过DialogSettings与主题文件配置通过Application.Run(dialog)模态运行按Application.GetDefaultKey()默认 Esc或任意按钮即结束Canceled属性用于判断是否被取消Result为null或非最后一个按钮注意文档明确提示不支持设置ViewportSettings.HasHorizontalScrollBar/HasVerticalScrollBar可能引发布局问题。典型用法示例摘自源码注释Dialog dialog new () { Title Confirm }; dialog.AddButton (new () { Title _Cancel }); dialog.AddButton (new () { Title _Ok }); Label label new () { Text Are you sure? }; dialog.Add (label); Application.Run (dialog); if (dialog.Result 1) // OK 按钮第二个按钮索引 1 { // 用户点击了 OK }Tabs选项卡容器功能将每个 SubView 渲染为带标签头的可选选项卡当前获得焦点的 SubView 即被选中的最前选项卡。源码位于 Terminal.Gui/Views/Tabs.cs。五、数据展示TableView、TreeView、GraphView、Markdown、Code、HexView、ImageViewTableView表格功能基于ITableSource展示表格数据支持无限滚动。源码 Terminal.Gui/Views/TableView/TableView.cs 给出默认键盘绑定方向键移动行列、PageUp/PageDown翻页、Home/End到首末列、CtrlHome/CtrlEnd到首末行、Shift方向扩展选区、CtrlA全选单元格。它提供多种颜色委托CellColorGetterDelegate、RowColorGetterDelegate、HeaderColorGetterDelegate用于自定义单元格/行/表头配色。深入用法参见 docfx/docs/tableview.md。TreeView 与 TreeViewT树形视图TreeViewTerminal.Gui/Views/TreeView 目录是泛型TreeViewT对所有节点实现ITreeNode场景的便捷实现TreeViewT支持层级树与可展开分支分支对象在展开时由用户自定义的ITreeBuilderT动态确定适合懒加载大型树数据。 深入用法参见 docfx/docs/treeview.md实战示例可看 Examples/UICatalog/Scenarios/TreeViewFileSystem.cs文件系统树与 Examples/UICatalog/Scenarios/TreeUseCases.cs。GraphView 与 LegendAnnotation图表GraphViewTerminal.Gui/Views/GraphView 目录以灵活的标签、缩放与滚动能力展示柱状图、散点图等LegendAnnotation由GraphView用于渲染图例符号含义如颜色与含义的对应关系。 图表示例见 Examples/UICatalog/Scenarios/GraphViewExample.cs。Markdown 系列Markdown、MarkdownCodeBlock、MarkdownTableMarkdownTerminal.Gui/Views/Markdown 目录是只读视图以样式化标题、列表、链接、代码块等渲染 Markdown 文本MarkdownCodeBlock渲染单个 Markdown 围栏代码块带暗色背景与可选复制按钮MarkdownTable渲染单个 Markdown 表格通过LineCanvas绘制框线表头/正文支持行内 Markdown 格式。 Markdown 渲染示例见 Examples/UICatalog/Scenarios/MarkdownTester.cs。Code代码浏览功能只读视图渲染带语法高亮的源代码。源码位于 Terminal.Gui/Views/Code.cs语法高亮器可参考 Terminal.Gui/Drawing/Markdown/TextMateSyntaxHighlighter.cs 与 Terminal.Gui/Views/CodeRoleLegendHighlighter.cs。HexView十六进制编辑器功能十六进制编辑器左侧显示Stream中字节的十六进制值右侧显示其内容过滤为可打印 Unicode 字形。源码位于 Terminal.Gui/Views/HexView.cs事件参数见 Terminal.Gui/Views/HexViewEventArgs.cs相关配置见 Terminal.Gui/Configuration/Settings/HexViewSettings.cs。ImageView图像显示功能将图像表示为二维Color像素数组并显示。支持两种渲染模式Terminal.Gui/Views/ImageView 目录基于单元格cell-based每个像素一个带色空格任何终端均可工作基于光栅raster-based面向支持 Sixel 或 Kitty 图形协议的终端。 对应编码器位于 Terminal.Gui/Drawing/Sixel/SixelEncoder.cs 与 Terminal.Gui/Drawing/Kitty/KittyGraphicsEncoder.cs。六、颜色选择ColorPicker、ColorPicker16、AttributePickerColorPicker彩色选择器功能支持 RGB、HSL、HSV 三种颜色模型的取色器可通过滑块与来自IColorNameResolver的颜色名称选择颜色。源码位于 Terminal.Gui/Views/Color 目录颜色模型定义见 Terminal.Gui/Drawing/Color/ColorModel.cs。ColorPicker16经典 16 色选择器功能支持传统 16 种 ANSI 颜色的简单取色器适合兼容旧式终端配色方案。AttributePicker属性选择器功能允许用户通过选择前景色、背景色与文本样式来挑选一个Attribute即完整的文本渲染属性组合。源码同样位于 Terminal.Gui/Views/Color 目录Attribute类型定义见 Terminal.Gui/Drawing/Attribute.cs。七、菜单与命令体系Shortcut、Bar、Menu、MenuBar、MenuItem、PopoverMenu、StatusBar这一家族是 Terminal.Gui 命令式 UI 的核心围绕Shortcut快捷键条目与Bar条目容器构建。Shortcut快捷键条目功能展示一条命令、帮助文本与一个键绑定。它是Bar、Menu、MenuBar、StatusBar的基础构件。源码位于 Terminal.Gui/Views/Shortcut.cs。关于命令路由模式的深入说明参见 docfx/docs/shortcut.md。Bar条目容器功能将Shortcut项水平或垂直排列的容器是Menu、MenuBar、StatusBar的基类。源码位于 Terminal.Gui/Views/Bar.cs。Menu、MenuItem、MenuBar、MenuBarItem、PopoverMenu菜单体系Menu垂直方向的Bar包含MenuItem支持级联子菜单、选中状态跟踪与IValueT模式MenuItemShortcut派生项用于Menu中显示命令、帮助文本与键绑定并支持嵌套SubMenu构成级联菜单MenuBar水平的Menu包含MenuBarItem通常置于窗口或视图顶部。源码 Terminal.Gui/Views/Menu/MenuBar.cs 给出关键行为默认Y 0、Width Dim.Fill()撑满父视图宽度激活Key默认F10可通过DefaultKey配置激活菜单栏激活后打开第一个带PopoverMenu的MenuBarItemActive属性控制激活状态弹层浏览PopoverMenu打开期间用方向键、鼠标悬停或热键在MenuBarItem间移动会自动切换可见弹层IsOpen指示是否有弹层可见命令分发采用 consume-dispatch 模式ConsumeDispatch true、GetDispatchTarget Focused并注册Command.HotKey、Command.Quit、Command.Right、Command.Left的自定义命令处理器导航左右方向键在MenuBarItem间移动焦点Application.GetDefaultKey()与Key关闭弹层并取消激活MenuBarItem用于MenuBar的MenuItem派生项。每个MenuBarItem持有PopoverMenu模态默认或内联SubMenu非模态作为选中时显示的下拉菜单由UsePopoverMenu属性控制PopoverMenuIPopover派生的级联菜单视图既可作为右键上下文菜单也可作为MenuBar的下拉菜单使用。相关基类见 Terminal.Gui/App/Popovers/Popover.cs菜单体系整体说明参见 docfx/docs/menus.md。StatusBar状态栏功能吸附在 Viewport 底部的视图显示一组Shortcut。源码 Terminal.Gui/Views/StatusBar.cs 揭示其布局Y Pos.AnchorEnd()、Width Dim.Fill()、水平方向、使用Schemes.Menu配色TabStop TabBehavior.NoStop不参与焦点导航。文档特别强调StatusBar 应当是上下文敏感的例如主菜单与文本编辑器同时可见时状态栏可能显示~F1~ Help ~F2~ Save ~F3~ Load而当加载文件对话框执行期间剩余命令可能只剩~F1~ Help。因此每个上下文都应新建一个状态栏实例例如换一个模态对话框时替换状态栏内容。八、对话框与向导PromptT、Runnable 家族、Wizard、WizardStepPromptT带结果的提示框功能包装任意View外加 Ok/Cancel 按钮的对话框用户确认时提取类型化结果。源码位于 Terminal.Gui/Views/Prompt.cs扩展方法见 Terminal.Gui/Views/PromptExtensions.cs。Runnable 与 RunnableT、RunnableWrapperTRunnableTerminal.Gui/Views/Runnable 目录是IRunnable的基实现适用于可作为阻塞会话运行且无需返回结果的视图RunnableT是返回类型化结果的阻塞会话基实现RunnableWrapperT包装任意View使其成为带类型结果的 runnable而无需添加对话框按钮。相关接口定义见 Terminal.Gui/App/Runnable/IRunnable.cs。Wizard 与 WizardStep向导WizardTerminal.Gui/Views/Wizard 目录是多步骤对话框用于在连续步骤中收集相关数据WizardStep是Wizard中的单一步骤可包含任意View并在右侧Padding中显示帮助文本。 向导示例见 Examples/UICatalog/Scenarios/Wizards.cs。九、文件对话框FileDialog、OpenDialog、SaveDialogFileDialogOpenDialog与SaveDialog的基类提供文件/目录选择的基础交互与样式FileDialogStyleSettings可配置见 Terminal.Gui/Configuration/Settings/FileDialogStyleSettings.csOpenDialog用于选择要打开的文件或目录的交互式对话框SaveDialog用于选择保存位置的文件或目录的交互式对话框。 三者源码位于 Terminal.Gui/Views/FileDialogs 目录。注意生成脚本对这三个对话框使用了更大的录制画布94×23因为文件浏览器界面需要更多空间。相关示例见 Examples/UICatalog/Scenarios/FileDialogExamples.cs。十、日期与时间编辑DateEditor、DatePicker、TimeEditorDateEditor日期编辑框功能基于TextValidateField提供日期编辑能力且带**区域性感知culture-aware**的格式化。源码位于 Terminal.Gui/Views/TextInput/DateEditor.cs其掩码提供器为 Terminal.Gui/Views/TextInput/DateTextProvider.cs。TimeEditor时间编辑框功能同样基于TextValidateField提供区域性感知的时间编辑能力。源码位于 Terminal.Gui/Views/TextInput/TimeEditor.cs掩码提供器见 Terminal.Gui/Views/TextInput/TimeTextProvider.cs。DatePicker日期选择器功能从可视化日历中选择日期。源码位于 Terminal.Gui/Views/DatePicker.cs示例见 Examples/UICatalog/Scenarios/DatePickers.cs。十一、滚动与分隔ScrollBar、ScrollButton、ScrollSlider、Line、LinkScrollBar、ScrollButton、ScrollSlider滚动条三件套ScrollBarTerminal.Gui/Views/ScrollBar 目录指示可滚动内容的大小并控制可见内容位置可垂直或水平提供两个ScrollButton上/左与下/右滚动以及可拖动的ScrollSliderScrollSlider的尺寸反映可滚动内容与Viewport的比例ScrollButton用于向前/向后滚动内容的Button按住鼠标时支持 hold-repeat 连续滚动其箭头字形由Direction与Orientation组合决定对照表如下方向Orientation滚动方向Direction字形Glyph水平向后BackwardGlyphs.LeftArrow水平向前ForwardGlyphs.RightArrow垂直向后BackwardGlyphs.UpArrow垂直向前ForwardGlyphs.DownArrowScrollSlider表示可见内容相对 Viewport 的比例可用鼠标拖拽受其父视图 Viewport 尺寸约束可垂直或水平定向。Line分隔线功能使用Line.Style指定的LineStyle绘制单条直线常用于界面元素间的视觉分隔。源码位于 Terminal.Gui/Views/Line.cs线型定义见 Terminal.Gui/Drawing/LineCanvas/LineStyle.cs。Link超链接功能显示可点击的超链接支持可选显示文本与目标 URL。源码位于 Terminal.Gui/Views/Link.cs示例见 Examples/UICatalog/Scenarios/Links.cs。十二、附加说明如何运行与体验这些视图仓库提供了两条最直接的体验路径UICatalogExamples/UICatalog包含大量演示场景例如AllViewsTesterExamples/UICatalog/Scenarios/AllViewsTester.cs会列出所有派生自View的类选中后即可实时调整其布局、装饰Adornments、排列Arrangement与 Viewport 设置——这正是文档中多次提到的设计器场景。运行方式为在仓库根目录执行dotnet run --project Examples/UICatalog输出视图动图本文档所有 GIF 均由OutputView工具配合tuirec录制见 docfx/scripts/OutputView 与 docfx/scripts/generate-views-doc.ps1。其中部分静态视图如ScrollBar、SpinnerView不添加边框帧对话框类使用更大的录制画布这解释了各 GIF 的视觉差异。结语如何从这份清单中快速定位所需视图从源码结构看全部内置视图统一位于 Terminal.Gui/Views 及其子目录Color、FileDialogs、GraphView、ImageView、LinearRange、ListView、Markdown、Menu、ScrollBar、Selectors、SpinnerView、TableView、TextInput、TreeView、Wizard等命名与文档一一对应便于直接跳转阅读。选用时可遵循以下简单路线需要文本输入单行用TextField多行用TextView固定格式用TextValidateField需要选择单选列表用ListView/OptionSelector枚举单选用DropDownListT/OptionSelectorT标志位多选用FlagSelectorT连续区间用LinearRangeT需要容器/导航非重叠分组用FrameView重叠窗口用Window模态取结果用Dialog/DialogT分步收集用Wizard页签切换用Tabs需要数据展示表格用TableView树用TreeView图表用GraphViewMarkdown/代码/十六进制/图像分别对应Markdown、Code、HexView、ImageView需要菜单/状态命令式交互基于ShortcutBar家族顶栏菜单用MenuBar底部上下文快捷栏用StatusBar需要反馈进度用ProgressBar不确定等待用SpinnerView颜色选取用ColorPicker/ColorPicker16/AttributePicker。这份由 API 文档自动生成的视图清单docfx/docs/views.md会随源码同步更新是查阅 Terminal.Gui 内置控件全貌最权威的入口本文则在此基础上补齐了各控件的默认键鼠绑定、配置项与源码定位可作为你开发终端应用时的速查手册。赞分享UI组件跨平台桌面应用【免费下载链接】Terminal.GuiCross Platform Terminal UI toolkit for .NET项目地址https://gitcode.com/gh_mirrors/te/Terminal.Gui点击查看免费下载相关推荐Terminal.Gui 内置控件全景Views 命名空间体系与源码级解析Terminal.Gui 内置控件全景Views 命名空间体系与源码级解析 本篇指南以 Terminal.Gui.Views 命名空间为核心系统梳理这个跨平UI组件跨平台桌面应用WordPress 块编辑器 BackgroundImageControl 组件背景图选择、焦点定位与尺寸控制实战指南WordPress 块编辑器 BackgroundImageControl 组件背景图选择、焦点定位与尺寸控制实战指南 BackgroundImageCont后端前端Terminal.Gui 50内置控件全景指南用UICatalog一次看懂所有TUI组件Terminal.Gui 50内置控件全景指南用UICatalog一次看懂所有TUI组件 Terminal.Gui 是一个跨平台的 .NET 终端 UI 工UI组件跨平台桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考