本文介绍如何在 Xamarin.Mac 应用程序中使用工具栏。 它介绍如何在 Xcode 和 Interface Builder 中创建和维护工具栏,将其公开给代码,并通过编程方式使用这些工具栏。

使用 Visual Studio for Mac的 Xamarin.Mac 开发人员可以访问适用于使用 Xcode 的 macOS 开发人员(包括工具栏控件)的相同 UI 控件。 由于 Xamarin.Mac 直接与 Xcode 集成,因此可以使用 Xcode 的 Interface Builder 创建和维护工具栏项。 还可以在 C# 中创建这些工具栏项。

macOS 中的工具栏将添加到窗口顶部,并轻松访问与其功能相关的命令。 工具栏可由应用程序的用户隐藏、显示或自定义,并且可以以各种方式呈现工具栏项。

本文介绍在 Xamarin.Mac 应用程序中使用工具栏和工具栏项的基础知识。

在继续阅读之前,请阅读 Hello、Mac 文章(特别是 Xcode 和 Interface Builder Outlets 和 Actions 部分简介),因为它涵盖了将在整个本指南中使用的关键概念和技术。

另请查看 Xamarin.Mac 内部 文档部分 的“公开 C# 类/方法Objective-C ”。 其中介绍了用于将 C# 类Objective-C连接到类的 Register Export 属性。

工具栏简介

macOS 应用程序中的任何窗口都可以包括工具栏:

工具栏为应用程序的用户提供了一种简单的方式来快速访问重要的或常用的功能。 例如,文档编辑应用程序可能提供用于设置文本颜色、更改字体或打印当前文档的工具栏项。

工具栏可以通过三种方式显示项:

  • 图标和文本

    通过右键单击工具栏并选择上下文菜单中的显示模式,在这些模式之间进行切换:

    使用相同的菜单以较小的大小显示工具栏:

    菜单还允许自定义工具栏:

    在 Xcode 的 Interface Builder 中设置工具栏时,开发人员可以提供不属于其默认配置的附加工具栏项。 然后,应用程序的用户可以自定义工具栏,根据需要添加和删除这些预定义项。 当然,工具栏可以重置为其默认配置。

    工具栏会自动连接到 “视图 ”菜单,允许用户隐藏、显示和自定义它:

    有关更多详细信息,请参阅 内置菜单功能 文档。

    此外,如果在 Interface Builder 中正确配置了工具栏,应用程序将自动在应用程序的多个启动之间保留工具栏自定义项。

    本指南的下一部分介绍如何使用 Xcode 的 Interface Builder 创建和维护工具栏,以及如何在代码中使用这些工具栏。

    设置自定义主窗口控制器

    若要通过出口和操作向 C# 代码公开 UI 元素,Xamarin.Mac 应用必须使用自定义窗口控制器:

  • 在 Xcode 的 Interface Builder 中打开应用的情节提要。

  • 选择设计图面上的窗口控制器。

  • 切换到 标识检查器 ,并输入“WindowController”作为 类名

  • 保存更改并返回到Visual Studio for Mac进行同步。

  • WindowController.cs 文件将在 Visual Studio for Mac 的 Solution Pad 中添加到项目中:

  • 在 Xcode 的 Interface Builder 中重新打开情节提要。

  • WindowController.h 文件将可供使用:

    在 Xcode 中创建和维护工具栏

    工具栏是使用 Xcode 的接口生成器创建的和维护的。 若要向应用程序添加工具栏,请在 Solution Pad 中双击应用,编辑应用的主要情节提要 (,在本例中, Main.storyboard ) :

    库检查器 中,在 搜索框中 输入“工具”,以便更轻松地查看所有可用的工具栏项:

    将工具栏拖到 界面编辑器 中的窗口上。 选中工具栏后,通过在 Attributes Inspector 中设置属性来配置其行为:

    以下属性可用:

  • 显示 - 控制工具栏是显示图标、文本还是两者
  • 在启动时可见 - 如果选中,则默认显示工具栏。
  • 可自定义 - 如果选择,用户可以编辑和自定义工具栏。
  • 分隔符 - 如果选择,则精简水平线将工具栏与窗口的内容分隔开来。
  • 大小 - 设置工具栏的大小
  • 自动保存 - 如果选择,应用程序将在应用程序启动时保留用户的工具栏配置更改。
  • 选择 “自动保存 ”选项,并将所有其他属性保留在其默认设置中。

    接口层次结构 中打开工具栏后,通过选择工具栏项来显示自定义对话框:

    使用此对话框可设置已属于工具栏的项目的属性,为应用程序设计默认工具栏,并为用户提供自定义工具栏时要选择的额外工具栏项。 若要将项添加到工具栏,请从 库检查器 中拖动它们:

    可以添加以下工具栏项:

  • 图像工具栏项 - 具有自定义图像作为图标的工具栏项。

  • 灵活空间工具栏项 - 用于证明后续工具栏项的灵活空间。 例如,一个或多个工具栏项后跟灵活空间工具栏项,另一个工具栏项将最后一项固定到工具栏右侧。

  • 空格工具栏项 - 修复了工具栏上项之间的空间

  • 分隔符工具栏项 - 两个或多个工具栏项之间的可见分隔符,用于分组

  • 自定义工具栏项 - 允许用户自定义工具栏

  • 打印工具栏项 - 允许用户打印打开的文档

  • 显示颜色工具栏项 - 显示标准系统颜色选取器:

  • 显示字体工具栏项 - 显示标准系统字体对话框:

    若要将项添加到工具栏,请在 “接口层次结构 ”中选择工具栏,然后单击其中一项,导致自定义对话框出现。 接下来,将新项从 库检查器 拖到 “允许的工具栏项 ”区域:

    若要确保新项是默认工具栏的一部分,请将其拖动到 “默认工具栏项 ”区域:

    若要重新排序默认工具栏项,请向左或向右拖动它们。

    接下来,使用 Attributes Inspector 设置项目的默认属性:

    以下属性可用:

  • 图像名称 - 用作项图标的图像
  • 标签 - 要为工具栏中的项显示的文本
  • 调色板标签 - 要为 “允许工具栏项 ”区域中的项目显示的文本
  • 标记 - 一个可选的唯一标识符,可帮助识别代码中的项。
  • 标识符 - 定义工具栏项类型。 自定义值可用于在代码中选择工具栏项。
  • 可选 - 如果选中,项目将像打开/关闭按钮一样。
  • 将项目添加到 “允许的工具栏项 ”区域,但不向默认工具栏提供用户自定义选项。

    将其他 UI 控件添加到工具栏

    还可以将多个 Cocoa UI 元素(如搜索字段和分段控件)添加到工具栏。

    若要尝试此操作,请在 “接口层次结构 ”中打开工具栏,然后选择一个工具栏项以打开自定义对话框。 将 搜索字段 库检查器 拖到 “允许的工具栏项 ”区域:

    在此处,使用 Interface Builder 配置搜索字段,并通过操作或出口将其公开给代码。

    内置工具栏项支持

    默认情况下,多个 Cocoa UI 元素与标准工具栏项交互。 例如,将 文本视图 拖到应用程序的窗口中,并将其定位为填充内容区域:

    保存文档,返回到Visual Studio for Mac以与 Xcode 同步,运行应用程序,输入一些文本,选择它,然后单击 “颜色 ”工具栏项。 请注意,文本视图自动与颜色选取器一起使用:

    将图像与工具栏项配合使用

    使用 图像工具栏项 ,添加到 Resources 文件夹的任何位图图像 (,并且给定 捆绑资源 ) 的生成操作可以作为图标显示在工具栏上:

  • 在Visual Studio for Mac的 Solution Pad 中,右键单击 “资源 ”文件夹,然后选择“ AddAdd > 文件”。

  • 在“ 添加文件 ”对话框中,导航到所需的图像,选择它们并单击“ 打开 ”按钮:

  • 选择 “复制 ”,选中“ 对所有所选文件使用相同的操作 ”,然后单击“ 确定 ” :

  • Solution Pad 中,双击 MainWindow.xib 以在 Xcode 中打开它。

  • 选择 “接口层次结构 ”中的工具栏,然后单击其中一项以打开自定义对话框。

  • 图像工具栏项 库检查器 拖到工具栏的 “允许工具栏项 ”区域:

  • “属性检查器 ”中,选择刚刚添加到Visual Studio for Mac的图像:

  • 标签 设置为“回收站”, 将调色板标签 设置为“擦除文档”:

  • 分隔符工具栏项 库检查器 拖到工具栏的 “允许工具栏项 ”区域:

  • 将分隔符项和“垃圾桶”项拖到 默认工具栏项 区域,并将工具栏项的顺序从左到右设置,如下所示 (颜色、字体、分隔符、垃圾箱、灵活空间、打印) :

  • 保存更改并返回到Visual Studio for Mac以与 Xcode 同步。

    运行应用程序以验证默认是否显示新工具栏:

    使用出口和操作公开工具栏项

    若要在代码中访问工具栏或工具栏项,必须附加到出口或操作:

  • Solution Pad 中,双击 Main.storyboard 以在 Xcode 中打开它。

  • 确保已将自定义类“WindowController”分配给 标识检查器 中的主窗口控制器:

  • 接下来,选择 接口层次结构 中的工具栏项:

  • 打开 助手视图 ,选择 WindowController.h 文件,并从工具栏项拖动到 WindowController.h 文件。

  • 连接 类型设置为 “操作 ”,输入 名称 的“trashDocument”,然后单击 “连接 ”按钮:

  • ViewController.h 文件中将 文本视图 公开为名为“documentEditor”的出口:

  • 保存更改并返回到Visual Studio for Mac以与 Xcode 同步。

    在Visual Studio for Mac中,编辑 ViewController.cs 文件并添加以下代码:

    public void EraseDocument() {
        documentEditor.Value = "";
    

    接下来,编辑 WindowController.cs 文件,并将以下代码添加到类的 WindowController 底部:

    [Export ("trashDocument:")]
    void TrashDocument (NSObject sender) {
        var controller = ContentViewController as ViewController;
        controller.EraseDocument ();
    

    运行应用程序时, 回收站 工具栏项将处于活动状态:

    请注意, 回收站 工具栏项现在可用于删除文本。

    禁用工具栏项

    若要禁用工具栏上的项,请创建自定义 NSToolbarItem 类并重写 Validate 该方法。 然后,在 Interface Builder 中,将自定义类型分配给要启用/禁用的项。

    若要创建自定义NSToolbarItem类,请右键单击项目并选择“AddNew>文件...”。选择 GeneralEmpty> 类,输入名称的“ActivatableItem”,然后单击“新建”按钮:

    接下来,编辑 ActivatableItem.cs 文件以按如下所示读取:

    using System;
    using Foundation;
    using AppKit;
    namespace MacToolbar
        [Register("ActivatableItem")]
        public class ActivatableItem : NSToolbarItem
            public bool Active { get; set;} = true;
            public ActivatableItem ()
            public ActivatableItem (IntPtr handle) : base (handle)
            public ActivatableItem (NSObjectFlag  t) : base (t)
            public ActivatableItem (string title) : base (title)
            public override void Validate ()
                base.Validate ();
                Enabled = Active;
    

    双击 Main.storyboard 以在 Xcode 中打开它。 选择上面创建的 回收站 工具栏项,并将其类更改为 标识检查器中的“ActivatableItem” :

    创建名为trashItem“回收站”工具栏项的出口。 保存更改并返回到Visual Studio for Mac以与 Xcode 同步。 最后,打开 MainWindow.cs 并更新 AwakeFromNib 方法以按如下所示读取:

    public override void AwakeFromNib ()
        base.AwakeFromNib ();
        // Disable trash
        trashItem.Active = false;
    

    运行应用程序并注意, 回收站 项目现在在工具栏中处于禁用状态:

    本文详细介绍了如何使用 Xamarin.Mac 应用程序中的工具栏和工具栏项。 本文介绍了如何在 Xcode 的 Interface Builder 中创建和维护工具栏、某些 UI 控件如何自动处理工具栏项、如何在 C# 代码中使用工具栏,以及如何启用或禁用工具栏项。

  • MacToolbar (示例)
  • 了解 Mac
  • 工具栏的人机界面指南
  • 工具栏简介
  •