65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Roma Widget Set (C# X11) 编程 - 一个零依赖的 GUI 应用程序框架 - 复合控件。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (10投票s)

2014年3月31日

CPOL

63分钟阅读

viewsIcon

33837

如何用 C# 高效地开发 Linux/Unix (X11) GUI 应用程序,而无需依赖 GTK 或 KDE 等 GUI 框架。复合控件的说明。

引言

本文仅包含Roma Widget Set (Xrw) 复合控件的描述。之所以创建本文,是因为整个主题扩展到 50 多页,所以我决定将其分为三个部分,其中包含 ,并分为四个部分,其中包含

下面描述的所有功能都可以标记为

  • 版本 0.1 可用,
  • 版本 0.2 禁用,
  • 版本 0.2 可用,
  • 版本 0.3 禁用,
  • 版本 0.3 可用,
  • 版本 0.4 禁用,
  • 版本 0.4 可用,
  • 版本 0.5 禁用,
  • 版本 0.5 可用,
  • 版本 0.6 禁用,
  • 版本 0.6 可用,
  •  版本 0.7 禁用,
  •  版本 0.7 可用,
  •  版本 0.8 禁用,
  •  版本 0.8 可用。

控件集

控件的名称和功能遵循“Athena 控件集”的思路,并受到“Motif 控件集”和 GTK 的一些影响。控件集尚未完成,但正在不断发展。从版本 开始,控件集包含受现代 GUI 工具包启发的更高级的控件。控件层次结构如下所示

内置控件

从版本 开始,简单控件在文章 编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 内置控件 中进行了描述。它们包括

XrwObject:IDisposable 此控件集的最底层对象[1, ∅]
⌊ XrwRectObject 具有几何形状的基础对象[1, ∅]
  ⌊ XrwVisibleRectObject 具有绘制功能的基础对象[1, ∅]
    ⌊ XrwCore 通用基础小部件/控件[2/3, ∅]
      ⌊ XrwComposite 容器[2/3, ∅],管理多个子控件
        ⌊ XrwConstraint 容器[2/3, ∅],具有几何管理功能
        ⌊ XrwShell 基础 shell 控件[3]
          ⌊ XrwOverrideShell 基础弹出 shell,不与窗口管理器交互[4]
          ⌊ XrwWmShell 基础 shell,与窗口管理器交互[4]
            ⌊ XrwApplicationShell X11 应用程序的通用代码
            ⌊ XrwTransientShell 弹出窗口的基类,与窗口管理器交互[4]

[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化

简单控件

从版本 开始,简单控件在新的文章 编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 简单控件 中进行了描述。它们包括

XrwObject:IDisposable 此控件集的最底层对象[1, ∅]
⌊ XrwRectObject 具有几何形状的基础对象[1, ∅]
  ⌊ XrwVisibleRectObject 具有绘制功能的基础对象[1, ∅]
    ⌊ XrwCore 通用基础小部件/控件[2/3, ∅]
      ⌊ XrwSimple 通用对象[2/3]
        ⌊ XrwColorChooserComb 命名颜色选择器控件[3],颜色排列为组合框
        ⌊ XrwImage 图像对象[2/3]
        ⌊ XrwLabelBase 静态标签基础对象[2/3, ∅]
        | ⌊ XrwComboBox 下拉选择控件[3]
        | ⌊ XrwLabel 静态标签[2/3]
        | | ⌊ XrwCommand 命令按钮控件[3]
        | | | ⌊ XrwMenuButton 按钮控件[3],用于弹出简单菜单
        | | ⌊ XrwSme 简单菜单项小部件[2]
        | ⌊ XrwLabelAndColor 标签和颜色矩形控件[3],用于选择颜色
        | ⌊ XrwTextSpinButton 旋转按钮控件[3],用于旋转文本常量
        | ⌊ XrwToggle 切换按钮控件[3]
        |   ⌊ XrwRadio 单选按钮控件[3]
        |     ⌊ XrwNotebookTab 笔记本标签按钮控件[3]
        ⌊ XrwList 列表控件[3]
        ⌊ XrwRange 滚动条和标尺的通用基类[3]
        | ⌊ XrwScale 标尺控件[3]
        | ⌊ XrwScrollbar 滚动条控件[3]
        ⌊ XrwRibbonCommandBase 功能区命令小部件的基对象[2, ∅]
        | ⌊ XrwRibbonButton 功能区命令小部件[2],用于功能区
        | | ⌊ XrwRibbonSplitButton 功能区按钮小部件[2],用于弹出简单菜单
        | ⌊ XrwRibbonControlGroup 功能区小部件[2],用于组织控件组节点
        ⌊ XrwText 单行文本编辑控件[3]
        ⌊ XrwTree 切换按钮控件[3]
        ⌊ XrwViewportGridViewHeader 用于视口嵌入式网格的列标题控件[3]

[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化

复合控件

从版本 开始,复合控件在**本**文章中进行描述。它们包括

XrwObject:IDisposable 最底层对象[1, ∅]
⌊ XrwRectObject 具有几何形状的基础对象[1, ∅]
  ⌊ XrwVisibleRectObj 具有绘制功能的基础对象[1, ∅]
    ⌊ XrwCore 通用基础小部件/控件[2/3, ∅]
      ⌊ XrwComposite 容器[2/3, ∅],管理多个子控件
        ⌊ XrwConstraint 容器[2/3, ∅],具有几何管理功能
        | ⌊ XrwBox 容器[2/3],水平/垂直排列子控件
        | | ⌊ XrwHslColorPanel 色相、饱和度、亮度颜色选择器小部件[2]
        | | ⌊ XrwNotebook 容器[2/3],在页面上排列子控件
        | | ⌊ XrwRadioBox 小部件[2],水平/垂直排列 XrwRadio 子控件
        | | ⌊ XrwSpinBox 小部件[2],将不可见子控件旋转到可见状态
        | ⌊ XrwFrame 容器[2/3],仅排列一个子控件
        | ⌊ XrwGridForm 容器[2/3],在列/行网格中排列子控件
        | | ⌊ XrwColorSelector-
        | |      GridForm
容器[2/3]XrwGridForm 用于 XrwLabelAndColor 子控件
        | | ⌊ XrwCustomColorChooser-
        | |      GridForm
容器[2]XrwGridForm 用于通过 HSL 或 RGB 颜色模型选择自定义颜色的子控件
        | | ⌊ XrwRgbColorPanel 红、绿、蓝颜色选择器小部件[2]
        | ⌊ XrwPaned 控件[2],控制两个或多个分隔的子控件
        | ⌊ XrwPorthole 小部件[2],一次只显示***一个***子控件
        | ⌊ XrwPropertyGrid 控件[3],用于浏览和编辑对象的属性
        | ⌊ XrwRibbon 控件[3],实现功能区 GUI
        | ⌊ XrwRibbonPanel 小部件[2],用于功能区组织命令对象
        | ⌊ XrwRibbonTab 小部件[2],水平排列 XrwRibbonPanel 子控件
        | ⌊ XrwViewport 容器[2/3],使***一个***子控件可以滚动
        ⌊ XrwShell 基础 shell 控件[3]
          ⌊ XrwOverrideShell 基础弹出 shell,不与窗口管理器交互[4]
          | ⌊ XrwBaseCellEditorShell 弹出编辑器 shell[2] 基类
          |   ⌊ XrwGenericCell-
          |        EditorShell
通用弹出编辑器 shell[2]
          | ⌊ XrwRibbonAppMenu XrwRibbon 的弹出应用程序菜单 shell[2]
          | ⌊ XrwSimpleMenu 用于 XrwSme 小部件的弹出菜单 shell[2]
          |   ⌊ XrwDropDownCell-
          |   |    EditorShell
下拉列表弹出编辑器 shell[2]
          |   ⌊ XrwSpinMenu XrwSme 小部件的弹出可滚动菜单 shell[2]
          ⌊ XrwWmShell 基础 shell,与窗口管理器交互[4]
            ⌊ XrwApplicationShell X11 应用程序的通用代码
            ⌊ XrwTransientShell 弹出窗口的基类,与窗口管理器交互[4]
              ⌊ XrwDialogShell 对话框的基类,与窗口管理器交互[4]

[1] 对象 = 不可见且无窗口,不使用***父***窗口或***自有***窗口
[2] 小部件 = 使用***父***窗口而不是***自有***窗口,比控件节省资源,但只能接收其包含控件转发的事件
[3] 控件 = 拥有***自有***窗口,可直接接收窗口管理器的事件[4]
[4] WM = 窗口管理器
[∅] 请勿实例化

XrwBox

XrwBox 类水平或垂直排列子控件。它与 GTK 的 Box 相当。它与 Athena 的“Box”不同,后者仅移动子控件而不调整其大小。

XrwBox 类是 XrwConstraint 的子类。它评估子控件的约束 ExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth,并在适当的时候调整子控件的大小。

此类没有公共构造函数,但有四个静态工厂方法。NewHBoxWidget/NewHBoxGadged 创建一个水平方向子控件放置的新 XrwBoxNewVBoxWidget/NewVBoxGadged 创建一个垂直方向子控件放置的新 XrwBox

图像显示了一个 XrwBox 中的两个水平方向的 XrwCommand 子控件。子控件对齐方式为 1.0。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox

新的事件定义

XrwBox 可以实例化为控件或小部件。控件可以在 X 服务器端拥有自己的窗口,从而接收事件。小部件只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
ChildAlign float get, set 0.5
Orientation TOrientation get Horizontal
  • ChildAlign 获取或设置子控件对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当存在剩余空间可供对齐时,对齐方式才生效。(这意味着 ExpandToMaxSiblings* 不会占用全部空间,并且任何子控件都不会设置 ExpandToAvailable*。)
  • Orientation 获取子控件放置方向。

重写的公共属性 (XrwVisibleRectObj)

  • ExpandToAvailableHeight 指示是否将高度扩展到可用高度(由其所在的 XrwComposite 定义)。
  • ExpandToAvailableWidth 指示是否将宽度扩展到可用宽度(由其所在的 XrwComposite 定义)。

新的公共方法

无。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth 将可用空间分配给子控件(如果有),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

用法

示例代码展示了如何将 XrwBox 用作对话框 shell 的操作区域。

// Define the action area.
XrwBox hboxActionArea = XrwBox.NewHBoxGadget (vboxMain);
hboxActionArea.BorderWidth = 2;
hboxActionArea.ChildAlign = 1.0F;
hboxActionArea.HorzSpacing = XrwTheme.DlgShellPrimaryChildSpacing;
hboxActionArea.BorderColor = hboxActionArea.BackgroundColorDark;
vboxMain.AddChild (hboxActionArea);

// Add two buttons right aligned (hbox.ChildAlign == 1.0F).
X11Graphic cancelGraphic = XrwTheme.GetGraphic (_display,
    _screenNumber, X11Graphic.StockIcon.Cancel16);
XrwCommand cbCancel = XrwCommand.NewCommandWidget (hboxActionArea,
     "Cancel", cancelGraphic, true, null, false);
cbCancel.ExpandToMaxSiblingWidth = true;
cbCancel.HorzTextAlign = 0.5F;
cbCancel.ButtonRelease += HandleCbCancelButtonRelease;
hboxActionArea.AddChild (cbCancel);

X11Graphic okGraphic = XrwTheme.GetGraphic (_display,
    _screenNumber, X11Graphic.StockIcon.Ok16);
XrwCommand cbOk = XrwCommand.NewCommandWidget (hboxActionArea,
    "OK", okGraphic, true, null, false);
cbOk.ExpandToMaxSiblingWidth = true;
cbOk.HorzTextAlign = 0.5F;
cbOk.ButtonRelease += HandleCbOkButtonRelease;
hboxActionArea.AddChild (cbOk); 

示例代码展示了如何将 XrwBox 用作对话框 shell 的管理器小部件。

public class XrwBitmapAndVectorFontSelectionDialog : XrwDialogShell
{
    // Define constants and member attributes.
    ...
 
    // Implement the constructor.
    public XrwBitmapAndVectorFontSelectionDialog (XrwApplicationShell parent,
                                                  ref Point assignedPosition,
                                                  ref Size assignedSize, string title)
        : base (parent, ref assignedPosition, ref assignedSize)
    {
        // Initialize member attributes.
        ...
 
        // Create shell's primary layout manager.
        XrwBox vboxMain = XrwBox.NewVBoxGadget (this);
        vboxMain.BorderWidth = XrwTheme.DlgShellPrimaryChildBorderWidth;
        vboxMain.BorderColor = _backgroundColor;
        vboxMain.VertSpacing = XrwTheme.DlgShellPrimaryChildSpacing;
        AddChild (vboxMain);
 
        // Create shell's grandchildren.
        ...
    }
 
    // Implement the destructor, properties and methods.
    ...   
} 

XrwHslColorPanel

XrwHslColorPanel 类排列用于色相和饱和度选择的位图以及用于亮度选择的滚动条。此类在 Athena 和 GTK 中是未知的,其原型是 System.Windows.Forms 的“ColorDialog”自定义颜色选项卡。

XrwHslColorPanel 类是一个小部件,允许用户从色相、饱和度和亮度颜色组件中选择自定义颜色值。

此类没有公共构造函数,但有一个静态工厂方法。NewHslColorPanelGadget 创建一个新的 XrwHslColorPanel

图像显示了一个颜色为白色XrwHslColorPanel

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwHslColorPanel

新的事件定义

XrwHslColorPanel 始终实例化为小部件。它只能接收从父控件转发的事件。

要接收事件,需要一个服务器端的窗口(该对象必须是控件,而不是小部件)。否则,事件只能从控件转发到子小部件。(Athena 也采用了这种方法,将事件从“SimpleMenu”转发到“Sme*”。)

  • ColorSelected 在选择任何颜色后发生,并调用已注册的事件处理程序委托。

新的公共属性

名称 类型 访问 默认/回退
SelectedColor int get, set 0xFFFFFF
SelectedColorHTML 字符串 get #FFFFFF
SelectedColorHSL int get 0x0000FF
  • SelectedColor 获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。
  • SelectedColorHTML 以 HTML 名称获取当前选定的颜色。
  • SelectedColorHSL 获取或设置当前选定的颜色,其值为色相、饱和度和亮度颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。

重写的公共属性

无。

特定的静态方法

  • RgbToHsl 将 RGB 颜色值转换为 HSL 颜色值。
  • HslToRgb 将 HSL 颜色值转换为 RGB 颜色值。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

用法

示例代码展示了如何使用 XrwRgbColorPanel

// Create a HSL color panel.
XrwHslColorPanel hslColorPanel = XrwHslColorPanel.NewHslColorPanelGadget (parent);
parent.AddChild (hslColorPanel);
parent.SetChildConstraints (hslColorPanel, "2", "0", "2", "0", "0");
parent.Rows[2].FixedDimension = 2 * MARGIN + hslColorPanel.PreferredSize().Height;

// Register the delegate to get informed about any color selection.
hslColorPanel.ColorSelected += delegate(XrwRectObj source, int newValue, string newValueHtml)
{
    // Process the color selection.
    ...
};

XrwNotebook

XrwNotebook 类在页面上排列子控件。它与 GTK 的 Notebook 相当。

XrwNotebook 类是 XrwConstraint 的子类,其子控件是页面,可以通过任一边缘的标签页进行切换。

此类没有公共构造函数,但有两个静态工厂方法。 NewTopTabedNotebookGadget 创建一个新的 XrwNotebook,其中标签页位于顶部。 NewBottomTabbedNotebookGadget 创建一个新的 XrwNotebook,其中标签页位于底部。

此类引入了四个特殊常量

  • CaptionbarPosition.Top,
  • CaptionbarPosition.Left,
  • CaptionbarPosition.Right
  • CaptionbarPosition.Bottom,

它们定义了笔记本标题栏的位置。

下图显示了一个具有四个 CaptionbarPosition.Top 标签的笔记本,位于标签框内(“File”、“Dialog test”、“Toggle test”和“Radio test”)。第一个标签“File”被选中,显示标签堆栈中的第一个页面(包含四个按钮:“File”、“Close menu”、“Message box”和“Close app”)。

下图显示了一个具有五个 CaptionbarPosition.Bottom 标签的笔记本,位于标签框内(“Menu”、“Toggle”、“Radio”、“Spin”和“Edit”)。第四个标签“Spin”被选中,显示标签堆栈中的第四个页面(包含一个文本旋转按钮“Spin text 1”和一个组合框“A”,其中有一个旋转菜单)。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwNotebook

新的事件定义

XrwNotebook 始终实例化为小部件。它只能接收从父控件转发的事件。

要接收事件,需要一个服务器端的窗口(该对象必须是控件,而不是小部件)。否则,事件只能从控件转发到子小部件。(Athena 也采用了这种方法,将事件从“SimpleMenu”转发到“Sme*”。)

  • TabSelectionChanged 在选定的标签页更改后发生,并调用已注册的事件处理程序委托。

新的公共属性

名称 类型 访问 默认/回退
CountPages int get 0
PageStack XrwPorthole get != null
TabBox XrwRadioBox get != null
TabPosition CaptionbarPosition get CaptionbarPosition.Top
  • CountPages 获取页面数量。
  • PageStack 获取包含页面的视口控件。
  • TabBox 获取包含标签页的框控件。
  • TabPosition 获取笔记本标题栏的位置。

重写的公共属性

无。

新的公共方法

  • PageWidget 获取指定页面的页面控件。索引越界时会引发 IndexOutOfRangeException
  • TabWidget 获取指定标签页的标签控件。索引越界时会引发 IndexOutOfRangeException

重写公共方法 (XrwCore)

  • Realize() 在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。

重写公共方法 (XrwComposite)

  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • RemoveChild() 未实现。

新的事件处理程序

  • OnTabSelectionChanged() 处理 TabSelectionChanged 事件。

重写的事件处理程序

无。

新的预注册事件委托

XrwNotebook 本身不注册任何事件处理程序,但它为每个标签页的 XrwRadio 子控件注册一个 SwitchedOn 事件处理程序。

  • SwitchedOn += HandleTabSwitchedOnDefault 在任何标签页的 XrwRadio 子控件上,都会使相应的页面可见,关闭此 XrwRadioBox 中的所有其他 XrwRadio 子控件并隐藏它们对应的页面。

用法

XrwNotebook 的设计旨在以最少的精力创建笔记本。

此示例代码创建了一个顶部标签页笔记本,添加了一个功能区,并将一个命令按钮作为示例内容放入添加的功能区中。

// Create a top tabbed notebook.
XrwNotebook notebookTopTabbed = XrwNotebook.NewTopTabbedNotebookGadget (vboxMain);
notebookTopTabbed.FrameType = TFrameType.RaisedBottomOnly;
notebookTopTabbed.FrameWidth = XrwTheme.InteractiveFrameWidth;
vboxMain.AddChild (notebookTopTabbed);

// Create a ribbon tab "Dialog test".
XrwBox hboxToggleNbTab = XrwBox.NewHBoxGadget (notebookTopTabbed);
hboxToggleNbTab.BorderWidth = 0;
hboxToggleNbTab.ChildAlign = 0.0F;
hboxToggleNbTab.VertSpacing = 0;
notebookTopTabbed.AddChild (hboxToggleNbTab);

// Name the notebook tab's caption.
XrwNotebookTab firstTabWidget = notebookTopTabbed.TabWidget (notebookTopTabbed.CountPages - 1);
if (firstTabWidget != null)
    firstTabWidget.Label = " Dialog test ";

// Create a sample content (command button) into the ribbon tab.
X11Graphic fontGraphic = XrwTheme.GetGraphic ( _display,_screenNumber,
                                               X11Graphic.StockIcon.FontBitmapFont16);
XrwCommand fontDialog = XrwCommand.NewCommandWidget (hboxFileRibbon, "Font dialog",
                                                     fontGraphic, true, null, false);
fontDialog.FrameType  = XrwTheme.StaticFrameType;
fontDialog.FrameWidth = XrwTheme.StaticFrameWidth;
fontDialog.ExpandToAvailableHeight = true;
fontDialog.ButtonRelease += HandleFontDialogButtonRelease;
hboxToggleNbTab.AddChild (fontDialog); 

此示例代码创建了一个底部标签页笔记本,添加了一个功能区,并将一个文本旋转按钮作为示例内容放入添加的功能区中。

// Create a bottom tabbed notebook.
XrwNotebook notebookBottomTabbed = XrwNotebook.NewBottomTabbedNotebookGadget (vboxMain);
notebookBottomTabbed.FrameType = TFrameType.RaisedTopOnly;
notebookBottomTabbed.FrameWidth = XrwTheme.InteractiveFrameWidth;
vboxMain.AddChild (notebookBottomTabbed);

// Create a ribbon tab "Spin".
XrwBox hboxSpinNbTab = XrwBox.NewHBoxGadget (notebookBottomTabbed);
hboxSpinNbTab.BorderWidth = 0;
hboxSpinNbTab.ChildAlign = 0.0F;
hboxSpinNbTab.VertSpacing = 0;
notebookBottomTabbed.AddChild (hboxSpinNbTab);

// Name the ribbon tab's caption.
XrwNotebookTab firstTabWidget = notebookBottomTabbed.TabWidget (notebookBottomTabbed.CountPages - 1);
if (firstTabWidget != null)
    firstTabWidget.Label = " Spin ";

// Create a sample content (text spin button) into the ribbon tab.
XrwTextSpinButton textSpinner = XrwTextSpinButton.NewHXrwTextSpinButton
    (hboxSpinNbTab, "Spin text 1\nText 2\nText 3\nText 4\nSpin text 5");
textSpinner.ExpandToAvailableWidth = false;
textSpinner.HorzTextAlign = 0.5F;
textSpinner.ExpandToMaxSiblingHeight = true;
hboxSpinNbTab.AddChild (textSpinner); 

XrwRadioBox

XrwRadioBox 类水平或垂直排列 XrwRadio 子控件。它与 GTK 中没有边框的单选按钮组的表示相当。

XrwRadioBoxXrwConstraint 的子类,它实现了其单选按钮子控件中一次只能选择一个。

此类没有公共构造函数,但有两个静态工厂方法。NewHRadioBoxGadget 创建一个水平方向子控件的新 XrwRadioBoxNewVRadioBoxGadget 创建一个垂直方向子控件的新 XrwRadioBox

图像显示了一个包含三个单选按钮的水平方向 XrwRadioBox

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwRadioBox

新的事件定义

XrwRadioBox 始终实例化为小部件。它只能接收从父控件转发的事件。

无。

新的公共属性

无。

重写的公共属性

无。

新的公共方法

  • GetSelected() 获取当前选中的单选按钮。
  • GetSelectedIndex() 获取当前选中单选按钮的索引。

重写公共方法 (XrwComposite)

  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • RemoveChild() 未实现。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

XrwRadioBox 本身不注册任何事件处理程序,但它为每个 XrwRadio 子控件注册一个 SwitchedOn 事件处理程序。

  • SwitchedOn += HandleChildSwitchedOnDefault 在任何 XrwRadio 子控件上,会关闭此 XrwRadioBox 的所有其他 XrwRadio 子控件。

用法

此示例代码创建了一个包含三个单选按钮的单选框。

// Define the radio box.
XrwRadioBox hboxRadioNbTab = XrwRadioBox.NewHRadioBoxGadget (notebookBar);
hboxRadioNbTab.BorderWidth = 0;
hboxRadioNbTab.ChildAlign = 0.0F;
hboxRadioNbTab.VertSpacing = 0;

// Add three radio buttons left aligned (hbox.ChildAlign == 0.0F).
X11Graphic radioOffGraphic = XrwTheme.GetGraphic (_display,
    _screenNumber, X11Graphic.StockIcon.RadioOff16TrueColor);
X11Graphic radioOnGraphic = XrwTheme.GetGraphic (_display,
    _screenNumber, X11Graphic.StockIcon.RadioOn16TrueColor);
XrwRadio radio1 = XrwRadio.NewRadioWidget (hboxRadioNbTab,
    "Radio test 1", radioOffGraphic, true, radioOnGraphic, true);
radio1.ExpandToAvailableWidth = false;
radio1.FrameType  = XrwTheme.InteractiveFrameType;
radio1.FrameWidth = XrwTheme.InteractiveFrameWidth;
hboxRadioNbTab.AddChild (radio1);

XrwRadio radio2 = XrwRadio.NewRadioWidget (hboxRadioNbTab,
    "Radio test 2", radioOffGraphic, true, radioOnGraphic, true);
radio2.ExpandToAvailableWidth = false;
radio2.FrameType  = XrwTheme.InteractiveFrameType;
radio2.FrameWidth = XrwTheme.InteractiveFrameWidth;
hboxRadioNbTab.AddChild (radio2);

XrwRadio radio3 = XrwRadio.NewRadioWidget (hboxRadioNbTab,
    "Radio test 3", radioOffGraphic, true, radioOnGraphic, true);
radio3.ExpandToAvailableWidth = false;
radio3.FrameType  = XrwTheme.InteractiveFrameType;
radio3.FrameWidth = XrwTheme.InteractiveFrameWidth;
hboxRadioNbTab.AddChild (radio3); 

XrwSpinBox

XrwSpinBox 类水平或垂直排列子控件,与 XrwBox 类类似,但它可以隐藏子控件以满足请求的几何形状。其原型是 GTK Nautilus(文件管理器)路径栏。

XrwSpinBoxXrwConstraint 的子类,它可以组织比其可见区域更多的子控件。在这种情况下,它可以将不可见的子控件旋转到可见区域,并将可见子控件旋转到不可见区域 - 因此,如果需要,它会动态显示两个旋转导航器(前进和后退)。

此类没有公共构造函数,但有四个静态工厂方法。NewHSpinBoxWidget/NewHSpinBoxGadget 创建一个水平方向子控件放置的新 XrwSpinBoxNewVSpinBoxWidget/NewVSpinBoxGadget 创建一个垂直方向子控件放置的新 XrwSpinBox

图像显示了一个水平方向的 XrwSpinBox,包含后退和前进导航器以及八个按钮。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwSpinBox

新的事件定义

XrwSpinBox 始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。

无。

新的公共属性

名称 类型 访问 默认/回退
Back XrwCommand get != null
Forth XrwCommand get != null
ForceNavigators bool get, set false
PreferredSpinOffset int get 0
ShowNavigators bool get false
  • Back 获取后退导航按钮。该按钮可以是不可见的(未实现)或非活动的。
  • Forth 获取前进导航按钮。该按钮可以是不可见的(未实现)或非活动的。
  • ForceNavigators 指示是否永久显示导航按钮。
  • PreferredSpinOffset 获取第一个可见子控件的首选偏移量,如果需要旋转。
  • ShowNavigators 获取当前内部状态,指示是否显示导航按钮。

重写的公共属性 (XrwComposite)

  • Children 获取所有直接子控件的列表。

新的公共方法

无。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth 将可用空间分配给子控件(如果有),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Realize() 在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。

重写公共方法 (XrwComposite)

  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • HasChild() 测试指定的 XrwCore 是否为子控件。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • RemoveChild() 从子控件列表中移除指定的 XrwCore
  • RemoveChild() 从子控件列表中移除指定的 XrwCore。此方法调用 OnChildRemoved() 事件处理程序。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

  • Clicked += HandleForthButtonClickedDefault 在前进旋转按钮上,重新计算旋转后的子控件布局并重绘。
  • Clicked += HandleBackButtonClickedDefault 在后退旋转按钮上,重新计算旋转后的子控件布局并重绘。

XrwFrame

 XrwFrame 类仅在一个装饰性边框内排列一个子控件。它与 GTK 的 Frame 相当。

GTK 手册页对“Frame”的描述如下:
一个带装饰性边框和可选标签的容器

目前不支持标签。

此类没有公共构造函数,但有两个静态工厂方法。NewFrameWidget/NewFrameGadget 创建一个新的 XrwFrame

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwFrame

新的事件定义

XrwViewport 可以实例化为控件或小部件。控件可以在 X 服务器端拥有自己的窗口,从而接收事件。小部件只能接收从父控件转发的事件。

无。

新的公共属性

无。

重写的公共属性 (XrwComposite)

无。

新的公共方法

无。

重写公共方法 (XrwRectObj)

无。

重写公共方法 (XrwCore)

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

XrwGridForm

XrwGridForm 类使用预定义的列和行网格来排列子控件。它与 Motif 的 "Form" 控件相当,但不支持相对于表单边缘或彼此之间的对齐。

LessTif 手册页对“Form”的描述如下(LessTif 手册):
XmForm 是一个允许您指定复杂几何形状的控件。该控件能够根据彼此的位置对齐子控件。控件可以相互链接位置,固定在某个位置,或固定到表单的边缘。定位可以是相对的,也可以是绝对的。
用于布局子控件的算法是迭代的。在 LessTif 的开发版本中,该控件支持的迭代次数(在想要达到稳定状态之前)为 200。OSF/Motif® 使用的数字远高于此;如果 LessTif 中的数字太低导致您遇到问题(它会生成一个提到“bailout”的警告消息),则要么数字太低,要么您发现了错误

它不支持 Motif 的 XmNfractionBase 资源,而是通过调用 AddColumn("128")AddRow("256") 来支持具有固定尺寸的列和行,并通过调用 AddColumn("1.0*")AddRow("1.5*") 来支持动态尺寸。固定尺寸需要一个整数值(以像素为单位),动态尺寸需要一个浮点数后跟 "*"(乘以剩余的可用尺寸)。固定尺寸和动态尺寸可以在同一个表单控件中并行使用。XrwGridForm 不会迭代计算其子控件的位置,而是在一次传递中完成。

此类没有公共构造函数,但有一个静态工厂方法。NewGridFormGadget 创建一个新的 XrwGridForm

图像显示了一个 XrwGridForm,它有两列动态尺寸("1.0*" 和 "2.0*")和三行(静态 "36" 像素,动态 "1.0*" 和 "1.5*")。四个简单的按钮控件显示了列跨度(第 1 个)、行跨度(第 4 个)和边距(第 1 个...第 4 个)。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm

新的事件定义

XrwGridForm 始终实例化为小部件。它只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
CountColumns int get 0
CountRows int get 0
Columns ReadOnlyCollection<LaneData> get !=null
Rows ReadOnlyCollection<LaneData> get !=null
  • CountColumns 获取网格表单定义的列数。
  • CountRows 获取网格表单定义的行数。
  •  Columns 获取列车道数据的只读列表。
  •  Rows 获取行车道数据的只读列表。

重写的公共属性 (XrwComposite)

无。

新的公共方法

  • AddColumn() 在网格列的尾部添加一个新列并定义其宽度。
  • AddRow() 在网格行的尾部添加一个新行并定义其高度。
  • SetChildConstraints() 设置指定子控件的约束(边距、列、行、列跨度和行跨度)。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableWidthExpandToMaxSiblingWidth(因为功能区有固定高度,所以不考虑 ExpandToAvailableHeightExpandToMaxSiblingHeight)将可用空间分配给子控件(功能区选项卡),并设置 AssignedSizeAssignedPosition
  •  MinimumSize() 计算最小尺寸。
  •  PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Redraw() 重绘控件/小部件

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

子控件约束

子控件约束可以通过 SetChildConstraints() 设置,包括边距(左、右、上、下)、放置锚点(起始列和行)以及尺寸锚点(列跨度和行跨度)。根据约束,子控件可能会重叠。

XrwColorSelectorGridForm

 XrwColorSelectorGridForm 类使用预定义的列和行网格来排列 XrwLabelAndColor 子控件。它旨在作为控件创建,以小部件形式持有子控件(以节省内存和 X 服务器通信),并将其事件转发给子控件。布局与其基类 XrwGridForm 保持不变。

XmColorSelecrorGridForm 是一个控件,它提供一个可选择的预定义颜色网格

此类没有公共构造函数,但有几个静态工厂方法。NewColorSelectorGridForm16 创建一个包含 16 种可选预定义颜色的新 XrwColorSelectorGridFormNewColorSelectorGridForm140 创建一个包含 140 种可选预定义颜色的新 XrwColorSelectorGridForm(X11 定义了 140 种命名颜色)。

图像显示了一个 XrwColorSelectorGridForm,它有 2 列(固定宽度)和 8 行(固定高度),包含 16 个 XrwLabelAndColor 子控件,每个控件显示一个颜色矩形和颜色名称。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwColorSelectorGridForm

新的事件定义

XrwColorSelectorGridForm 始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。

  • ColorSelected 在选择预定义颜色之一后发生,并调用已注册的事件处理程序委托。

新的公共属性

名称 类型 访问 默认/回退
SelectedChildBorderColor TPixel
TColor
XrwTheme.ShadowFrame-ColorDark XrwTheme.ShadowFrame-ColorDark
SelectedColor int get, set 0xffffff
SelectedColorHtml 字符串 get !=null
  •  SelectedChildBorderColor 获取或设置选定颜色小部件的边框颜色。
  •  SelectedColor 获取或设置当前选定的颜色。
  •  SelectedHolorHrtml 以 HTML 名称获取当前选定的颜色。

重写的公共属性

无。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

  •  OnColorSelected() 处理 ColorSelected 事件。

重写的事件处理程序

无。

新的预注册事件委托

  • ButtonPress += HandleButtonPressDefault 执行按钮按下操作并将其转发给相应的子控件。

用法

示例代码展示了如何使用 XrwColorSelectorGridForm

// Create and register one of the three currently available color selection grid forms.
XrwColorSelectorGridForm colorSelector ;

if (colorArrangement == PredefinedColorArrangement.C07R20Named)
    colorSelector = XrwColorSelectorGridForm.NewColorSelectorGridForm140
                        (parent, colorArrangemen, initialColorValue);
else if (colorArrangement == PredefinedColorArrangement.C08R02)
    colorSelector = XrwColorSelectorGridForm.NewColorSelectorGridForm16
                        (parent, colorArrangemen, initialColorValue);
else if (colorArrangement == PredefinedColorArrangement.C02R08Named)
    colorSelector = XrwColorSelectorGridForm.NewColorSelectorGridForm16
                        (parent, colorArrangemen, initialColorValue);
parent.AddChild (colorSelector); 

XrwCustomColorChooserGridForm

 XrwCustomColorChooserGridForm 类使用预定义的列和行网格来排列其子控件 XrwHslColorPanelXrwHslColorPanel

XmColorSelecrorGridForm 是一个通过 HSL 或 RGB 颜色模型选择自定义颜色的控件

此类没有公共构造函数,但有一个静态工厂方法。NewCustomColorChooserGridForm 创建一个新的 XrwCustomColorChooserGridForm

图像显示了一个 XrwCustomColorChooserGridForm,其中 XrwHslColorPanel 用于通过 HSL 颜色模型选择自定义颜色,而 XrwHslColorPanel 用于通过 RGB 颜色模型选择自定义颜色。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwCustomColorChooserGridForm

新的事件定义

XrwCustomColorChooserGridForm 始终实例化为小部件。它只能接收从父控件转发的事件。

要接收事件,需要一个服务器端的窗口(该对象必须是控件,而不是小部件)。否则,事件只能从控件转发到子小部件。(Athena 也采用了这种方法,将事件从“SimpleMenu”转发到“Sme*”。)

  • ColorSelected 在选择任何颜色后发生,并调用已注册的事件处理程序委托。

新的公共属性

名称 类型 访问 默认/回退
SelectedColor int get, set 0xFFFFFF
SelectedColorHTML 字符串 get #FFFFFF
  • SelectedColor 获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。
  • SelectedColorHTML 以 HTML 名称获取当前选定的颜色。

重写的公共属性

无。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

用法

示例代码展示了如何使用 XrwRgbColorPanel

// Create a custom color grid form.
XrwCustomColorChooserGridForm gridCustomColors =
    XrwCustomColorChooserGridForm.NewColorChooserGridForm (parent, initialColorValue);
parent.AddChild (gridCustomColors);

// Register the delegate to get informed about any color choose.
gridCustomColors.ColorSelected += delegate(XrwRectObj source, int newValue, string newValueHtml)
{
    // Process the color selection.
    ...
};

XrwRgbColorPanel

XrwRgbColorPanel 类为红、绿、蓝三个颜色分量分别排列一个标签、一个滚动条和一个编辑器。此类在 Athena 和 GTK 中是未知的,其原型可以是互联网上许多免费颜色选择器之一。

XrwRgbColorPanel 类是一个小部件,允许用户从红、绿、蓝颜色分量中选择自定义颜色值。

此类没有公共构造函数,但有一个静态工厂方法。NewRgbColorPanelGadget 创建一个新的 XrwRgbColorPanel

图像显示了一个颜色为白色XrwRgbColorPanel

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwRgbColorPanel

新的事件定义

XrwRgbColorPanel 始终实例化为小部件。它只能接收从父控件转发的事件。

要接收事件,需要一个服务器端的窗口(该对象必须是控件,而不是小部件)。否则,事件只能从控件转发到子小部件。(Athena 也采用了这种方法,将事件从“SimpleMenu”转发到“Sme*”。)

  • ColorSelected 在选择任何颜色后发生,并调用已注册的事件处理程序委托。

新的公共属性

名称 类型 访问 默认/回退
SelectedColor int get, set 0xFFFFFF
SelectedColorHTML 字符串 get #FFFFFF
  • SelectedColor 获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。
  • SelectedColorHTML 以 HTML 名称获取当前选定的颜色。

重写的公共属性

无。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

用法

示例代码展示了如何使用 XrwRgbColorPanel

// Create a RGB color panel.
XrwRgbColorPanel rgbColorPanel = XrwRgbColorPanel.NewRgbColorPanelGadget (parent);
parent.AddChild (rgbColorPanel);
parent.SetChildConstraints (rgbColorPanel, "2", "0", "2", "0", "0");
parent.Rows[2].FixedDimension = 2 * MARGIN + rgbColorPanel.PreferredSize().Height;

// Register the delegate to get informed about any color selection.
rgbColorPanel.ColorSelected += delegate(XrwRectObj source, int newValue, string newValueHtml)
{
    // Process the color selection.
    ...
};

XrwPaned

XrwPaned 类按平铺方式排列子控件并允许更改其大小。它与 Athena 的 "Paned" 控件相当,已经包含了相应的 Athena "Grip" 控件。

X Toolkit Intrinsics 对“Paned”的描述如下(X Toolkit Intrinsics 参考手册):
Paned 控件以垂直或水平平铺方式管理子控件。用户可以通过使用出现在两个窗格之间边界右侧或底部边缘的抓手来动态调整窗格的大小。
当指针位于抓手处并按下时,会显示一个箭头,指示正在调整大小的窗格。在按住指针按钮的情况下,用户可以上下(或左右)移动指针。这反过来会改变窗格之间的边界,导致一个窗格收缩,而另一个(或多个)窗格增大。Paned 控件的大小不会改变Paned 控件可以接受任何控件类作为窗格,除了 Grip。Grip 控件对 Paned 控件有特殊含义,将其 Grip 添加为其自身的窗格会使 Paned 控件混乱。

此类没有公共构造函数,但有两个静态工厂方法。NewHPanedWidgetNewVPanedWidget 创建一个水平或垂直方向的 XrwPaned

图像显示了一个水平方向的 XrwPaned,其中包含一个 XrwTree 和一个 XrwPropertyGrid

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwBox --> XrwPaned

新的事件定义

XrwPaned 始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。

无。

新的公共属性

名称 类型 访问 默认/回退
ChildAlign float get, set 0.5
Orientation TOrientation get  
PanerBackgroundColorDark   TPixel
TColor
get, set PanerBackgroundColorDark
PanerBackgroundColorLight   TPixel
TColor
get, set PanerBackgroundColorLight
PanerBackgroundColorMedium   TPixel
TColor
get, set PanerBackgroundColorMedium
  • ChildAlign 获取或设置子控件对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当存在剩余空间可供对齐时,对齐方式才生效。(这意味着 XrwVisibleRectObj.ExpandToMaxSiblings*,设置为任何数量的子控件,都不会占用全部空间,并且 XrwVisibleRectObj.ExpandToAvailable* 不会为任何子控件设置。)
  • Orientation 获取子控件放置方向。
  • PanerBackgroundColorDark 获取或设置窗格之间背景色的 3/3。
  • PanerBackgroundColorLight 获取或设置窗格之间背景色的 1/3。
  • PanerBackgroundColorMedium 获取或设置窗格之间背景色的 2/3。

重写的公共属性 (XrwComposite)

无。

新的公共方法

无。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableWidthExpandToMaxSiblingWidth(因为功能区有固定高度,所以不考虑 ExpandToAvailableHeightExpandToMaxSiblingHeight)将可用空间分配给子控件(功能区选项卡),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

无。

新的事件处理程序

无。

重写事件处理程序 (XrwRectObj)

  • OnExpose() 处理 ExposeEvent 事件。

新的预注册事件委托

  • Enter += HandleEnterDefault 什么也不做。
  • Leave += HandleLeaveDefault 取消焦点子控件。
  • ChildAdded += HandleChildAddedDefault 为添加到 XrwPane 控件的 Children 集合的窗格子控件执行一些配置。

XrwPorthole

XrwPorthole 类按堆叠方式排列子控件,但一次只显示一个子控件。其原型是 Athena 的 "Porthole" 控件。

X Toolkit Intrinsics 对“Porthole”的描述如下(X Toolkit Intrinsics 参考手册):
Porthole 控件提供任意控件列表的几何管理,但任何时候只能管理一个控件。被管理的子控件会重定位到 porthole 内部,并由应用程序移动(通常由 Panner 控件控制)。
Porthole 控件允许其被管理的子控件请求任何大小,只要该大小等于或大于 Porthole 本身,并且任何位置只要子控件仍然遮挡 Porthole 的全部区域。

此类没有公共构造函数,但有一个静态工厂方法。NewPortholeGadget 创建一个新的 XrwPorthole

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwPorthole

新的事件定义

XrwPorthole 始终实例化为小部件。它只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
RealizedChild int get XrwCore
  • RealizedChild 获取当前已实现(可见)的子控件。

重写的公共属性

无。

新的公共方法

  • RealizeChild() 实现指定的子控件,并取消实现(隐藏)以前的子控件。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth 将可用空间分配给子控件(如果有),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Realize() 在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。

重写公共方法 (XrwComposite)

  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。
  • InsertChild() 将指定的 XrwCore 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。此方法调用 OnChildAdded() 事件处理程序。
  • RemoveChild() 从子控件列表中移除指定的 XrwCore
  • RemoveChild() 从子控件列表中移除指定的 XrwCore。此方法调用 OnChildRemoved() 事件处理程序。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

XrwPropertyGrid

XrwPropertyGrid 类允许浏览和编辑对象的属性。其原型是 System.Windows.Forms 的“PropertyGrid”控件。

属性网格控件类似于普通的双列树控件,但它只提供两个层级的层次结构(分支节点和叶子节点),并且叶子节点是可编辑的。叶子节点编辑器可以支持文本值、下拉列表、文件名浏览器或几乎任何其他可想象的类型。
PropertyGrid 控件显示给定对象(类实例)的属性,这些属性按类别分组,允许编辑这些属性。用于显示和编辑对象的属性是使用反射来确定的

XrwPropertyGrid 或多或少是一个特定配置的 XrwTree 控件的包装器,并包含一些附加功能。这包括

  • 一个标题区域,显示当前分配对象的类型和名称
  • 一个两列,第二个列中的叶子节点具有编辑功能
  • 一个描述区域,显示当前选中属性的名称和描述

此类没有公共构造函数,但有一个静态工厂方法。NewPropertyGridWidget 创建一个新的 XrwPropertyGrid

图像显示了一个 XrwPropertyGrid,包含两个类别(分支节点“Default”和“Demonstation”)、两个文本属性(叶子节点“Name”和“Col2”)、一个布尔属性(叶子节点“Col5”)、一个三态属性(叶子节点“Col6”)和一个枚举属性(叶子节点“Col7”)。所有叶子节点都可编辑。当前枚举属性(叶子节点“Col7”)处于编辑模式。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwPropertyGrid

新的事件定义

XrwPropertyGrid 始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。

无。

新的公共属性

名称 类型 访问 默认/回退
BoldTextColor   TPixel
TColor
get, set XrwTheme.TextColor
BoldFontData X11FontData get != null
TextColor   TPixel
TColor
get, set XrwTheme.TextColor
  FontData
DefaultFontData
X11FontData get != null
FontSpecification 字符串 get  
FontId IntPtr get IntPtr.Zero
 BoldFontSpecification 字符串 get  
BoldFontId IntPtr get IntPtr.Zero
SelectedBackground-
ColorDark
  TPixel
TColor
get, set XrwTheme.EditableBackground-
Color
SelectedBackground-
ColorLight
  TPixel
TColor
get, set XrwTheme.EditableBackground-
Color
SelectedBackground-
ColorMedium
  TPixel
TColor
get, set XrwTheme.EditableBackground-
Color
SelectedObject object get, set null
ShowDescription bool get, set true
  • BoldTextColor 获取或设置属性网格标签的粗体文本颜色。
  • BoldFontData 获取粗体字体数据。要设置粗体字体数据,请使用 SetBoldFont() 方法。
  • TextColor 获取或设置属性网格标签的文本颜色。
  • FontData  DefaultFontData 获取默认字体数据。要设置默认字体数据,请使用 SetDefaultFont() 方法。
  • FontSpecification 获取当前字体规范。空字符串表示初始使用的系统默认字体。要设置字体规范,请使用 SetFont() 方法。
  • FontId 获取当前字体 ID。IntPtr.Zero 表示初始使用的系统默认字体。此字体用于在标题区域显示当前分配对象的类型,在中显示分支节点,以及在描述区域显示当前选中属性的名称。
  • BoldFontSpecification 获取当前粗体字体规范。空字符串表示初始使用的系统默认字体。要设置字体规范,请使用 SetBoldFont() 方法。
  • BoldFontId 获取当前粗体字体 ID。IntPtr.Zero 表示初始使用的系统默认字体。此字体用于在标题区域显示当前分配对象的类型,在中显示分支节点,以及在描述区域显示当前选中属性的名称。
  • SelectedBackgroundColorDark 获取或设置选定属性节点的背景色 3/3。SelectedBackgroundColor* 颜色通常不明显,因为可编辑的正方形没有渐变。
  • SelectedBackgroundColorLight 获取或设置选定属性节点的背景色 1/3。SelectedBackgroundColor* 颜色通常不明显,因为可编辑的正方形没有渐变。
  • SelectedBackgroundColorMedium 获取或设置选定属性节点的背景色 2/3。SelectedBackgroundColor* 颜色通常不明显,因为可编辑的正方形没有渐变。
  • SelectedObject 获取或设置当前分配的对象。
  • ShowDescription 获取或设置是否显示描述区域。

注意:SelectedBackgroundColor*(继承自 XrwVisibleRectObj)颜色通常不明显,因为可编辑的正方形没有渐变。

重写的公共属性

无。

新的公共方法

  • SetBoldFont() 设置新的粗体字体。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 将可用空间(标题区域描述区域XrwPropertyGrid 的组成部分,会减少可用空间)根据子控件的 PreferredSizeExpandToAvailableWidthExpandToMaxSiblingWidth(因为功能区有固定高度,所以不考虑 ExpandToAvailableHeightExpandToMaxSiblingHeight)分配给子控件,并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • SetFont() SetDefaultFont() 设置新的默认字体。

重写公共方法 (XrwComposite)

  • AddChild() 不支持添加子控件。的视口是唯一的子控件。
  • InsertChild() 不支持插入子控件。的视口是唯一的子控件。
  • RemoveChild() 不支持移除子控件。的视口是唯一的子控件。

新的事件处理程序

无。

重写的事件处理程序

无。

预注册事件委托

  • EntrySelectionChanged += HandleTreeEntrySelectionChanged 处理属性网格树的 EntrySelectionChanged 事件。
  • SizePreferenceChanged += XrwViewport.HandleSizePreferenceChangedDefault 处理 SizePreferenceChanged 事件。

XrwRibbon

XrwRibbon 是一个命令栏,它将应用程序的功能组织到应用程序窗口顶部的选项卡系列中。功能区取代了传统的菜单栏和工具栏。功能区 UI 具有更好的功能可发现性,可以加快应用程序的学习速度,并使用户对应用程序的体验感觉更有掌控感。

功能区由几个组件构成。每个功能区都有一个应用程序菜单和任意数量的功能区选项卡。功能区选项卡包含面板,每个面板包含命令控件。相关的命令控件可以组合成控件组。

XrwRibbon 具有固定的高度,并且应始终扩展到窗口的全部宽度。

此类没有公共构造函数,但有一个静态工厂方法。NewRibbonWidget 创建一个新的 XrwRibbon 实例,该实例已经包含一个 XrwRibbonAppMenu,并准备好接受 XrwRibbonTab 子控件。

图像显示了一个 XrwRibbon,其中包含应用程序菜单按钮()和三个选项卡:“Dialog test”、“Radio & toggle test”以及“Split test”。第一个选项卡被选中,包含两个功能区面板。每个面板包含三个功能区按钮 - 第一个面板,“Large buttons”,在功能区面板标签旁边显示对话框启动器,其按钮的 CurrentSizeMode == RibbonPanelSizePolicy.Large;第二个面板,“Medium buttons”,在功能区面板标签旁边也显示对话框启动器,其按钮的 CurrentSizeMode == RibbonPanelSizePolicy.Medium

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbon

新的事件定义

XrwRibbon 始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。

无。

新的公共属性

名称 类型 访问 默认/回退
ApplicationButtonLabel 字符串 get, set  
ApplicationButtonBitmap X11Graphic get != null
ApplicationButtonBitmapShared bool get true
ApplicationMenu XrwRibbonAppMenu get != null
InactiveStyles StyleList get != null
NormalStyles StyleList get != null
  TextColor TPixel get, set XrwTheme.TextColor
  InactiveTextColor TPixel get, set XrwTheme.ShadowFrameColorDark
RibbonTabCaption-
BackgroundColorDark
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
BackgroundColor
RibbonTabCaption-
BackgroundColorLight
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
BackgroundColor
RibbonTabCaption-
BackgroundColorMedium
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
BackgroundColor
RibbonTabCaptionFocused-
BackgroundColorDark
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
FocusedBackgroundColor
RibbonTabCaptionFocused-
BackgroundColorLight
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
FocusedBackgroundColor
RibbonTabCaptionFocused-
BackgroundColorMedium
  TPixel
TColor
get, set XrwTheme.RibbonTabCaption-
FocusedBackgroundColor
  • ApplicationButtonLabel 获取或设置应用程序按钮的标签文本。
  • ApplicationButtonBitmap 获取应用程序按钮的位图。
  • ApplicationBitmapShared 获取应用程序按钮的位图共享标志。未共享的位图将在 XrwRibbonDispose() 中被释放,共享的位图则不会。
  • AppMenu 获取要弹出的关联应用程序菜单。
  •  InactiveStyles 获取用于绘制功能区按钮标签的非活动文本的样式列表。
  • NormalStyles 获取用于绘制功能区按钮标签的正常文本的样式列表。
  •   TextColor 获取或设置功能区按钮标签的文本颜色。已成为 NormalStyles 的一部分。
  • InactiveTextColor 获取或设置非活动功能区按钮标签的文本颜色。已成为 InactiveStyles 的一部分。
  • RibbonTabCaptionBackgroundColorDark 获取或设置功能区选项卡标题背景色的 3/3。
  • RibbonTabCaptionBackgroundColorLight 获取或设置功能区选项卡标题背景色的 1/3。
  • RibbonTabCaptionBackgroundColorMedium 获取或设置功能区选项卡标题背景色的 2/3。
  • RibbonTabCaptionFocusedBackgroundColorDark 获取或设置功能区选项卡标题焦点背景色的 3/3。
  • RibbonTabCaptionFocusedBackgroundColorLight 获取或设置功能区选项卡标题焦点背景色的 1/3。
  • RibbonTabCaptionFocusedBackgroundColorMedium 获取或设置功能区选项卡标题焦点背景色的 2/3。
  • ApplicationButtonLabel 获取或设置应用程序按钮的标签文本。
  • ApplicationButtonBitmap 获取应用程序按钮的位图。
  • ApplicationBitmapShared 获取应用程序按钮的位图共享标志。未共享的位图将在 XrwRibbonDispose() 中被释放,共享的位图则不会。

重写的公共属性 (XrwRectObj)

  • BorderWidth 现在为只读。

重写的公共属性 (XrwVisibleRectObj)

  • FrameWidth 现在不支持设置。
  • ExpandToAvailableHeight 现在不支持设置。

新的公共方法

  • SetApplicationButtonBitmap() 设置应用程序按钮的位图和位图共享标志。
  • GetSelectedTab() 获取当前选中的选项卡。可能为 null。
  • GetTextColor() 获取指定功能区选项卡的文本颜色。替换了getter属性 TextColor。默认值为 XrwTheme.TextColor。
  •  SetSelectedTab() 选择指定的选项卡。
  • SetTextColor() 设置指定功能区选项卡的文本颜色。替换了setter属性 TextColor

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableWidthExpandToMaxSiblingWidth(因为功能区有固定高度,所以不考虑 ExpandToAvailableHeightExpandToMaxSiblingHeight)将可用空间分配给子控件(功能区选项卡),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • AllWindowedWidgets() 返回所有带窗口的子控件的集合
  • Realize() 在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。
  • Redraw() 重绘控件/小部件。
  • Unrealize() 在 X 服务器上取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)。使对象不可见。

重写公共方法 (XrwComposite)

  • AddChild() 将指定的 XrwRobbonTab 添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略 null 指针。选择最后添加的子控件。
  • InsertChild() 将指定的 XrwRibbonTab 添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略 null 指针。选择最后添加的子控件。

新的事件处理程序

无。

重写事件处理程序 (XrwRectObj)

  • OnExpose() 处理 ExposeEvent 事件。

新的预注册事件委托

  • 应用程序按钮的 Click += HandleApplicationButtonClicked 会弹出应用程序菜单。
  • Enter += HandleEnterDefault 执行无操作。
  • Leave += HandleLeaveDefault 取消聚焦的子控件。
  • Motion += HandleMotionDefault 聚焦或取消聚焦相应的子控件。
  • ButtonPress+= HandleButtonPressDefault 为相应的子控件执行按钮按下 操作。
  • ButtonRelease += HandleButtonReleaseDefault 为相应的子控件执行按钮释放操作。

XrwRibbonPanel

XrwRibbonPanel 是应用程序命令控件布局的第二高层级,它将命令控件分组到功能区选项卡内的相关集合中。描述性的功能区面板标签解释了其命令控件的共同用途。

由于功能区实现为一个整体控件,其几乎所有的子控件(包括功能区面板)都实现为小部件。功能区面板是功能区子控件,它为功能区提供了带标签框架的功能。

XrwRibbonPanel 具有固定的高度,并根据其子控件的请求宽度进行扩展。如果功能区面板注册了ButtonRelease事件处理程序,则XrwRibbonPanel会显示一个对话框启动器()。

此类没有公共构造函数,但有一个静态工厂方法。NewRibbonPanelGadget 创建一个新的空的XrwRibbonPanel实例。

请参阅XrwRibbon的图像,获取功能区面板的示例图片。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbonPanel

新的事件定义

XrwRibbonPanel 始终作为小部件实例化。它只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
Label 字符串 get, set  
TextBackgroundColor   TPixel
TColor
get, set XrwTheme.RibbonPanelText-
BackgroundColor
TextColor   TPixel
TColor
get, set XrwTheme.TextColor
  • Label 获取或设置标签文本。
  • TextBackgroundColor 获取或设置面板标签的背景颜色。
  • TextColor 获取或设置面板标签的文本颜色。

重写的公共属性 (XrwRectObj)

  • BorderWidth 现在为只读。
  • FrameWidth 现在是只读的。

新的公共方法

  • TextBoxArea 计算面板标签的显示区域。
  • DialogLauncherArea 计算面板对话框启动器按钮区域。
  • InsideDialogLauncherBoundings 检查给定点是否在面板对话框启动器按钮区域内。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件(命令控件和控件组)的PreferredSize(但忽略ExpandToAvailableWidthExpandToMaxSiblingWidthExpandToAvailableHeightExpandToMaxSiblingHeight)分配可用空间,并设置AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Redraw() 重绘小部件。

新的事件处理程序

无。

重写事件处理程序 (XrwRectObj)

无。

新的预注册事件委托

无。

用法

XrwRibbonPanel 的设计旨在以最小的努力创建功能区面板。

XrwRibbonPanel panelLargeButtons = XrwRibbonPanel.NewRibbonPanel (dialogtestTab,
                                                                     "Large buttons");
if (panelLargeButtons != null)
{
    dialogtestTab.AddChild (panelLargeButtons);
    panelLargeButtons.ButtonRelease += delegate(XrwRectObj source, XrwButtonEvent e)
    {
        ApplicationFramework.WriteStatus ("XrwRibbonPanel '" + panelLargeButtons.Label +
                                          "' dialog launcher clicked.");
    };

    // Add command controls and/or control groups.
}

XrwRibbonTab

XrwRibbonTab 是应用程序命令控件布局的最高层级,应提供功能区选项卡标签与其中包含的命令控件之间的清晰、明显且唯一的映射。它组织应用程序的功能以帮助发现。

由于功能区实现为一个整体控件,其几乎所有的子控件(包括功能区选项卡)都实现为小部件。功能区选项卡是功能区子控件,它为功能区提供了类似于笔记本选项卡的功能。

功能区选项卡用于影响窗口内容的命令。例如,用于呈现、格式化、修改或使用文件或存储内容的命令,或更改视图的命令。(相比之下,应用程序菜单用于呈现涉及对文件或存储执行操作的命令,例如传统上放在文件菜单中的创建、打开、保存、打印以及发送或发布数据的命令。)

XrwRibbonTab 具有固定的高度,并始终扩展到功能区的完整宽度。

此类没有公共构造函数,但有一个静态工厂方法。NewRibbonTabGadget 创建一个新的空的XrwRibbonTab实例。

请参阅XrwRibbon的图像,获取功能区选项卡的示例图片。

此版本引入了标记。有关详细信息,请参阅 XrwLabelBase

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwRibbonTab

新的事件定义

XrwRibbonTab 始终作为小部件实例化。它只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
Label 字符串 get, set  
Lines StyleText get != null
HeaderFocused bool get, set false
Selected bool get, set false
  • Label 获取或设置标签文本。
  • Lines 获取要显示的样式字符的(多行)标签(\n 已转换为行)。
  • HeaderFocused 获取或设置功能区选项卡的标题当前是否获得焦点。
  • Selected 获取或设置功能区选项卡当前是否被选中。

重写的公共属性 (XrwRectObj)

  • BorderWidth 现在为只读。
  • FrameWidth 现在是只读的。

新的公共方法

  • TabHeaderPreferredSize 获取功能区选项卡标题的首选大小。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件(功能区面板)的PreferredSize(但忽略ExpandToAvailableWidthExpandToMaxSiblingWidthExpandToAvailableHeightExpandToMaxSiblingHeight)分配可用空间,并设置AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Redraw() 重绘小部件。

重写公共方法 (XrwComposite)

  • AddChild() 在尾部位置将指定的XrwRobbonPanel添加到子控件列表中。没有检查以防止重复添加相同的子控件。忽略null指针。选择最后添加的子控件。
  • InsertChild() 在指定位置(或作为备选的尾部位置)将指定的XrwRibbonPanel添加到子控件列表中。没有检查以防止重复添加相同的子控件。忽略null指针。选择最后添加的子控件。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

用法

XrwRobbonTab 的设计旨在以最小的努力创建功能区选项卡。

XrwRibbonTab dialogtestTab = XrwRibbonTab.NewRibbonTab (ribbon, "Dialog test");
if (dialogtestTab != null)
{
    ribbon.AddChild (dialogtestTab);

    // Add ribbon panels.
} 

XrwViewport

XrwViewport 类是一个可滚动视图区域控件。它类似于 Athena 的“Viewport”控件。

Athena 对“Viewport”的描述(X Window System Athena Widgets, Quick Reference Guide)如下:
Viewport 控件由一个框架窗口、一个或两个滚动条和一个内部窗口(通常包含一个子控件)组成。框架窗口的大小由要显示的数据的视图大小和创建 Viewport 的尺寸决定。内部窗口是全部要显示的数据的大小,并由框架窗口进行裁剪。Viewport 控件直接控制数据的滚动。滚动不需要应用程序回调。当框架窗口的几何形状与内部窗口相等时,或者当数据不需要滚动时,Viewport 控件会自动移除任何滚动条。“forceBars”选项会导致 Viewport 控件永久显示所有滚动条。

XrwViewport 使用四个内部控件——一个 Clip 控件(由 XrwSimple 实现),用于裁剪受控 Child 的不可见区域——一个 VScroll 控件(由垂直 XrwScroll 实现),用于控制 Child 的垂直位置——一个 HScroll 控件(由水平 XrwScroll 实现),用于控制 Child 的水平位置——以及受控的 ChildChild 是唯一用户定义的控件,必须通过AddChild()InsertChild()分配,可以是任何XrwCore或其派生类。

此类没有公共构造函数,但有两个工厂方法。NewViewportWidget/NewViewportGadged 创建一个新的XrwViewport

图像展示了 XrwViewport 的通用功能。

从此版本开始,XrwViewport 有了一个新的整体部分,即 XrwViewportGridViewHeader 控件——它将由 XrwViewport 自动创建和销毁。XrwViewportGridViewHeader 负责显示 XrwViewport 的列标题名称,但没有内部标题数据。它而是从 Child 获取标题数据。Child 属性支持任何 XrwCore 或其派生类,但只有当 Child 实现 XrwIGridView 接口时,XrwViewportGridViewHeader 才会显示列标题名称,否则它将保持为空。无论 Child 是否实现 XrwIGridView 接口,都可以通过HeaderVisibility属性控制标题的可见、隐藏或折叠,并且可以通过HeaderPreferredHeight属性定义标题的首选大小。

目前,XrwListXrwTree 实现XrwIGridView接口。

图像展示了 XrwViewport 的通用功能,包括 XrwViewportGridViewHeader

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwViewport

新的事件定义

XrwViewport 可以实例化为控件或小部件。控件可以在 X 服务器端拥有自己的窗口,从而接收事件。小部件只能接收从父控件转发的事件。

无。

新的公共属性

名称 类型 访问 默认/回退
AllowHoriz bool get, set true
AllowVert bool get, set true
Child XrwCore get null
Clip XrwSimple get != null
ClipFrameType TFrameType get, set TFrameType.None
ClipFrameWidth int get, set 0
ForceBars bool get, set false
HeaderBackground-
ColorDark
  TPixel
TColor
get, set XrwTheme.Interactive-
BackgroundColorDark
HeaderBackground-
ColorLight
  TPixel
TColor
get, set XrwTheme.Interactive-
BackgroundColorLight
HeaderBackground-
ColorMedium
  TPixel
TColor
get, set XrwTheme.Interactive-
BackgroundColorMedium
HeaderPreferredHeight int get, set 16
HeaderVisibility Visibility get, set Visibility.Collapsed
HScroll XrwScroll get != null
VScroll XrwScroll get != null
ScrollFrameType TFrameType get, set TFrameType.None
ScrollFrameWidth int get, set XrwTheme.NonInteracting-
FrameWidth
UseBottom bool get, set true
UseRight bool get, set true
ShowHScroll bool get  
ShowHScroll bool get  
ScrollOffsetX int get  
ScrollOffsetY int get  
  • AllowHorz 区分水平滚动条的允许/禁止可见性。
  • AllowVert 区分垂直滚动条的允许/禁止可见性。
  • Child 获取受控的(滚动的)子控件,以前通过SetChild()/InsertChild()设置,或者为null。
  • Clip 获取实现子控件裁剪的控件。
  • ClipFrameType 获取或设置裁剪控件的框架类型。
  • ForceBars 区分滚动条的永久强制可见性或自动可见性(如果需要)。
  • HeaderBackgroundColorDark 获取或设置网格视图列标题的背景颜色 3/3。
  • HeaderBackgroundColorLightm 获取或设置网格视图列标题的背景颜色 1/3。
  • HeaderBackgroundColorMedium 获取或设置网格视图列标题的背景颜色 2/3。
  • HeaderPreferredHeight 获取或设置网格视图列标题的首选高度。
  • HeaderVisibility 获取或设置网格视图列标题的可见性。
  • HScroll 获取实现水平滚动的控件。
  • VScroll 获取实现垂直滚动的控件。
  • ScrollFrameType 获取或设置滚动控件的框架类型。
  • ScrollFrameWidth 获取或设置滚动控件的框架宽度。
  • UseBottom 区分顶部或底部对齐的水平滚动条。
  • UseRight 区分左侧或右侧对齐的垂直滚动条。
  • ShowHScroll 获取水平滚动条当前是否可见。
  • ShowVScroll 获取垂直滚动条当前是否可见。
  • ScrollOffsetX 获取子控件第一个列的 x 坐标偏移量。如果子控件已水平滚动,则为负值。
  • ScrollOffsetY 获取子控件第一个行的 y 坐标偏移量。如果子控件已垂直滚动,则为负值。

重写的公共属性 (XrwComposite)

  • Children 获取所有直接子控件的列表。

新的公共方法

  • RealizeChild() 实现指定的子控件并取消实现(隐藏)先前实现的子控件。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件的 PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth 将可用空间分配给子控件(如果有),并设置 AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写的公共方法 (XrwCore>)

  • Realize() 在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。

重写公共方法 (XrwComposite)

虽然 XrwViewport 派生自 XrwComposite,但只支持 ONE 个子控件。

  • AddChild() 将指定的 XrwCore 添加到子控件列表的尾部位置。没有检查以防止重复添加相同的子控件。移除先前的子控件(只允许一个子控件)。忽略null指针。
  • InsertChild() 将指定的 XrwCore 添加到子控件列表的指定位置(或作为备选的尾部位置)。没有检查以防止重复添加相同的子控件。移除先前的子控件(只允许一个子控件)。忽略null指针。
  • RemoveChild() 从子控件列表中移除指定的 XrwCore。忽略null指针。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

XrwViewport 不会自己注册事件处理程序,但它会为每个 XrwScrollbar 子控件注册一个 ScrollResponse 事件处理程序。

  • ThumbMoved += HandleHScrollResponseDefaultThumbMoved += HandleVScrollResponseDefault XrwScrollbar 子控件上更新受控子控件的位置。

用法

请参阅文章 释放列表和树控件的强大功能(X11) 以获取示例代码和有关应用程序的详细信息。

XrwBaseCellEditorShell

 XrwBaseCellEditorShell 是用于弹出式单元格编辑器的抽象基类,这些编辑器是XrwListXrwTree进行就地编辑所必需的。它实现了XrwICellEditorShell

基类单元格编辑器外壳用于确定列表或树的列就地编辑的适当单元格编辑器。编辑器作为列单元格的叠加层弹出进行编辑,并且必须符合单元格的数据类型。

此类是抽象的,无法实例化。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwBaseCellEditorShell.

新的事件定义

无。

新的公共属性

名称 类型 访问 默认/回退
Data object get, set != null
DataParent XrwCore get != null
DataBinding XrwBinding get != null
DataType System.Type get != null
InitialDataValue object get != null
  •  Data(实现XrwICellEditorShell)获取或设置要编辑的数据。
  •  DataParent(实现XrwICellEditorShell)获取或(仅限内部)设置作为要编辑的数据源的控件/小部件。
  •  DataBinding(实现XrwICellEditorShell)获取或(仅限内部)设置要编辑的数据属性的绑定。
  •  DataType(实现XrwICellEditorShell)获取或(仅限内部)设置要编辑的数据类型。
  •  InitialValue(实现XrwICellEditorShell)获取或(仅限内部)设置初始数据值(编辑前)。

重写的公共属性

无。

新的公共方法

  •  FindCellEditor() 确定列表或树的列就地编辑的适当单元格编辑器。

重写公共方法

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

无。

XrwGenericCellEditorShell

XrwGenericCellEditorShellXrwListXrwTree 的文本值单元格的就地编辑提供了一个弹出式单元格编辑器。

通用单元格编辑器外壳用作就地编辑列表或树单元格的弹出文本值编辑器。

此类没有公共构造函数,但有一个静态工厂方法。NewGenericCellEditorShell 创建一个新的空的XrwGenericCellEditorShell实例。通常,用户代码不需要调用工厂方法,因为XrwBaseCellEditorShell的静态FindCellEditor方法会在需要时创建一个实例。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwBaseCellEditorShell --> XrwGenericCellEditorShell.

新的事件定义

无。

新的公共属性

无。

重写的公共属性

无。

新的公共方法

无。

重写公共方法 (XrwRectObj)

  •  CalculateChildLayout() 将可用空间分配给子控件(文本编辑器)。编辑器外壳作为列单元格的叠加层弹出进行编辑,并且必须符合单元格的尺寸。

新的事件处理程序

无。

重写的事件处理程序

无。

预注册事件委托

  • FocusOut += HandleFocusOutDefault 取消实现此XrwGenericCellEditorShell

XrwRibbonAppMenu

XrwRibbonAppMenuXrwRibbon 的弹出式应用程序菜单,显示 XrwSme

应用程序菜单用于呈现涉及对文件或存储执行操作的命令,例如传统上放在文件菜单中的创建、打开、保存、打印以及发送或发布数据的命令。(相比之下,功能区选项卡用于影响窗口内容的命令。例如,用于呈现、格式化、修改或使用文件或存储内容的命令,或更改视图的命令。)

此类没有公共构造函数,但有一个静态工厂方法。NewRibbonAppMenu 创建一个新的空的XrwRibbonAppMenu实例。通常,用户代码不需要调用工厂方法,因为XrwRibbon类默认总是创建一个应用程序菜单。

由于 XrwRibbonAppMenu 派生自 XrwOverrideShell,它使用 XrwOverrideShell 的机制,在 Realize() 时将其自身注册到 XrwApplicationShell 的关联外壳列表中(作为覆盖外壳)以获取转发的事件,并在 Unrealize() 时从 XrwApplicationShell 的关联外壳列表中注销自身以停止事件转发。

图像显示了一个包含命令面板和详细信息面板的 XrwRibbonAppMenu

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwRibbonAppMenu

新的事件定义

XrwRibbonAppMenu 始终作为控件实例化。它可以自己接收事件(在 X 服务器端有一个窗口)。

无。

新的公共属性

名称 类型 访问 默认/回退
ChildAlign float get, set 0.5
CommandPanel XrwBox get != null
DetailsPanel XrwBox get != null
HorzSpacing long get, set 10
UnrealizeTimeStamp XrwScroll get != null
  • ChildAlign 获取或设置 CommandPanelDetailPanel 中不扩展到可用宽度的子控件的水平对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当有剩余空间可供对齐时,对齐方式才生效。(这意味着,expand-to-max-siblings-* 不使用全部空间,并且没有子控件设置expand-to-available-*。)
  • CommandPanel 获取命令面板(左侧应用程序菜单面板)。
  • DetailsPanel获取详细信息面板(右侧应用程序菜单面板)。
  • HorzSpacing 获取或设置命令面板和详细信息面板之间的水平间距。该值不能小于 0 或大于 400。
  • UnrealizeTimeStamp 获取最后一次 Unrealize() 调用时的时间戳(毫秒 + 秒 * 1000 + 分钟 * 60000 + 小时 * 3600000)。这可用于区分在上次 Unrealize() 调用后发生的非期望的 Realize() 调用和期望的 Realize() 调用。

重写的公共属性

无。

新的公共方法

无。

重写公共方法 (XrwRectObj)

  • CalculateChildLayout() 根据子控件(命令面板和详细信息面板)的PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth分配可用空间,并设置AssignedSizeAssignedPosition
  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Redraw() 重绘控件/小部件。
  • Realize() 分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。
  • Unrealize() 取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象不可见。

重写公共方法 (XrwComposite)

  • AddChild() 不支持。唯一的永久子控件是包含CommandPanelDetailPanel的水平框。
  • InsertChild() 不支持。唯一的永久子控件是包含CommandPanelDetailPanel的水平框。
  • RemoveChild() 不支持。唯一的永久子控件是包含CommandPanelDetailPanel的水平框。
  •  

新的事件处理程序

无。

重写事件处理程序 (XrwRectObj)

无。

新的预注册事件委托

  • Enter += HandleEnterDefault 设置焦点。
  • Leave += HandleLeaveDefault 取消焦点。
  • FocusIn += HandleFocusInDefault HandleCommandPannelChildAddedDefault。
  • FocusOut += HandleFocusOutDefault 取消实现此XrwSimpleMenu
  • Motion += HandleMotionDefault 设置或取消设置相应的 XrwSme 的焦点并调用 InvokeRedraw()
  • ButtonRelease += HandleButtonReleaseDefault 调用所有相应的 XrwSmeOnButtonRelease()
  • CommandPanel.ChildAdded += HandleCommandPannelChildAddedDefaultXrwRibbonAppMenu.HandleCommandButtonReleaseDefault 注册到新的命令面板子控件,并调整样式(颜色、边距等),如果新命令面板子控件的类型为 XrwSmeXrwRibbonAppMenu.HandleCommandButtonReleaseDefault 事件处理程序调用 Unrealize() 来处理 XrwRibbonAppMenu
  • DetailsPanel.ChildAdded += HandleDetailsPannelChildAddedDefaultXrwRibbonAppMenu.HandleDetailsPannelChildAddedDefault 注册到新的详细信息面板子控件,并调整样式(颜色、边距等),如果新的详细信息面板子控件的类型为 XrwSmeXrwRibbonAppMenu.HandleCommandButtonReleaseDefault 事件处理程序调用 Unrealize() 来处理 XrwRibbonAppMenu

用法

XrwRibbonAppMenu 的设计旨在以最小的努力创建功能区应用程序菜单。这是创建如上图所示的应用程序菜单的完整代码。

XrwBox commandPanel = ribbon.ApplicationMenu.CommandPanel;
if (commandPanel != null)
{
    // Prepare the images - except for WinMidori.
    X11Graphic appmenuGraphicNew     = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonNew));
    X11Graphic appmenuGraphicOpen    = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonOpen));
    X11Graphic appmenuGraphicSave    = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonSave));
    X11Graphic appmenuGraphicSaveAs  = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonSaveAs));
    X11Graphic appmenuGraphicOptions = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonOptions));
    X11Graphic appmenuGraphicClose   = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonClose));
    X11Graphic appmenuGraphicExit    = (XrwTheme.Style == XrwTheme.GeneralStyle.WinMidori ?
        null : XrwTheme.GetGraphic ( _display, _screenNumber, X11Graphic.StockIcon.RibbonExit));

    // Menu entry "New".
    XrwSme appmenuNew     = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "New",
        appmenuGraphicNew,     (appmenuGraphicNew    != null ? true : false), null, false);
    commandPanel.AddChild (appmenuNew);
    
    // Menu entry "Open" and delimiter.
    XrwSme appmenuOpen    = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Open",
       appmenuGraphicOpen,    (appmenuGraphicOpen   != null ? true : false), null, false);
    commandPanel.AddChild (appmenuOpen);
    appmenuOpen.ButtonRelease += HandleFileSelectionDialogButtonRelease;
    appmenuOpen.FrameType  = TFrameType.MenuDelimiter;
    appmenuOpen.FrameWidth = (XrwTheme.Style == XrwTheme.GeneralStyle.WinClassic ? 2 : 1);
    
    // Menu entry "Save".
    XrwSme appmenuSave    = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Save",
        appmenuGraphicSave,    (appmenuGraphicSave   != null ? true : false), null, false);
    commandPanel.AddChild (appmenuSave);
    
    // Menu entry "Save as" and delimiter.
    XrwSme appmenuSaveAs  = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Save as",
        appmenuGraphicSaveAs,  (appmenuGraphicSaveAs != null ? true : false), null, false);
    commandPanel.AddChild (appmenuSaveAs);
    appmenuSaveAs.ButtonRelease += HandleFileSelectionDialogButtonRelease;
    appmenuSaveAs.FrameType  = TFrameType.MenuDelimiter;
    appmenuSaveAs.FrameWidth = (XrwTheme.Style == XrwTheme.GeneralStyle.WinClassic ? 2 : 1);
    
     // Menu entry "Options".
    XrwSme appmenuOptions = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Options",
        appmenuGraphicOptions, (appmenuGraphicOptions != null ? true : false), null, false);
    commandPanel.AddChild (appmenuOptions);
    
    // Menu entry "Close" and delimiter.
    XrwSme appmenuClose   = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Close",
        appmenuGraphicClose,   (appmenuGraphicClose   != null ? true : false), null, false);
    commandPanel.AddChild (appmenuClose);
    appmenuClose.FrameType  = TFrameType.MenuDelimiter;
    appmenuClose.FrameWidth = (XrwTheme.Style == XrwTheme.GeneralStyle.WinClassic ? 2 : 1);
    
     // Menu entry "Exit".
    XrwSme appmenuExit    = XrwSme.NewSmeGadget (ribbon.ApplicationMenu, "Exit",
        appmenuGraphicExit,    (appmenuGraphicExit    != null ? true : false), null, false);
    commandPanel.AddChild (appmenuExit);
    appmenuExit.ButtonRelease += HandleCloseButtonRelease;
}
XrwBox detailsPanel = ribbon.ApplicationMenu.DetailsPanel;
if (detailsPanel != null)
{
    XrwLabel recentDocuments = XrwLabel.NewLabelGadget (detailsPanel, "Recent documents",
        null, false, null, false);
    detailsPanel.AddChild (recentDocuments);
    XrwSme recentDoc1 = XrwSme.NewSmeGadget (detailsPanel, "File 1", null, false, null, false);
    detailsPanel.AddChild (recentDoc1);
    XrwSme recentDoc2 = XrwSme.NewSmeGadget (detailsPanel, "File 2", null, false, null, false);
    detailsPanel.AddChild (recentDoc2);
}

XrwSimpleMenu

XrwSimpleMenu 类是一个弹出式外壳,显示 XrwSme。它类似于 Athena 的“SimpleMenu”。

Athena 对“SimpleMenu”的描述(Athena Widget Set — C Language Interface)如下:
SimpleMenu 控件是菜单窗格的容器。它是 shell 的直接子类,应该使用 XtCreatePopupShell() 而不是 XtCreateManagedWidget() 创建。 这是菜单中唯一真正与窗口关联的部分,因为每个菜单窗格都是一个小部件。SimpleMenu 作为将各个菜单项绑定到一个菜单的粘合剂。

此类没有公共构造函数,但有一个静态工厂方法。NewSimpleMenu 创建一个新的空的XrwSimpleMenu实例。通常,用户代码不需要调用工厂方法,因为XrwMenuButtonXrwRibbonSplitButton类默认总是创建一个简单菜单。

由于 XrwSimpleMenu 派生自 XrwOverrideShell,它使用 XrwOverrideShell 的机制,在 Realize() 时将其自身注册到 XrwApplicationShell 的关联外壳列表中(作为覆盖外壳)以获取转发的事件,并在 Unrealize() 时从 XrwApplicationShell 的关联外壳列表中注销自身以停止事件转发。

图像显示了一个包含两个 XrwSmeXrwSimpleMenu

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu

新的事件定义

XrwSimpleMenu 始终作为控件实例化。它可以自己接收事件(在 X 服务器端有一个窗口)。

无。

新的公共属性

名称 类型 访问 默认/回退
UnrealizeTimeStamp long get 0
VertSpacing int get, set 0
  • UnrealizeTimeStamp 获取最后一次 Unrealize() 调用时的时间戳(毫秒 + 秒 * 1000 + 分钟 * 60000 + 小时 * 3600000)。这可用于区分在上次 Unrealize() 调用后发生的非期望的 Realize() 调用和期望的 Realize() 调用。
  • VertSpacing 获取或设置两个相邻子控件之间的垂直间距。

重写的公共属性

无。

新的公共方法

  • CalculateChildLayout() 计算所有子控件的布局,并由此构成菜单的几何形状。此方法不覆盖 XrwRectObjCalculateChildLayout,因为它不需要参数。

重写公共方法 (XrwRectObj)

  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。

重写公共方法 (XrwCore)

  • Realize() 分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。
  • Unrealize() 取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象不可见。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

  • FocusIn += HandleFocusInDefault 无操作。
  • FocusOut += HandleFocusOutDefault 取消实现此XrwSimpleMenu
  • Motion += HandleMotionDefault 设置或取消设置相应的 XrwSme 的焦点并调用 InvokeRedraw()
  • ButtonPress += HandleButtonPressDefault 处理所有相应的 XrwSmeOnButtonPress()
  • ButtonRelease += HandleButtonReleaseDefault 处理所有相应的 XrwSmeOnButtonRelease()
  • ChildAdded += HandleChildAddedDefaultXrwSimpleMenu.HandleChildButtonReleaseDefault 注册到新子控件。此事件处理程序调用 Unrealize() 来处理 XrwSimpleMenu

用法

XrwSimpleMenu 通常与 XrwMenuButton 一起使用。有关 XrwSimpleMenu 用法详情,请参阅 XrwMenuButton

XrwDropDownCellEditorShell

 XrwDropDownCellEditorShellXrwListXrwTree 的可枚举值单元格的就地编辑提供了一个弹出式单元格编辑器。它实现了XrwICellEditorShell

下拉单元格编辑器外壳用作就地编辑列表或树单元格的弹出可枚举值编辑器。

此类没有公共构造函数,但有一个静态工厂方法。NewDropDownCellEditorShell 创建一个新的空的XrwDropDownCellEditorShell实例。通常,用户代码不需要调用工厂方法,因为XrwBaseCellEditorShell的静态FindCellEditor方法会在需要时创建一个实例。

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu --> XrwDropDownCellEditorShell.

新的事件定义

无。

新的公共属性

名称 类型 访问 默认/回退
Data object get, set != null
DataParent XrwCore get != null
DataBinding XrwBinding get != null
DataType System.Type get != null
InitialDataValue object get != null
  •  Data(实现XrwICellEditorShell)获取或设置要编辑的数据。
  •  DataParent(实现XrwICellEditorShell)获取或(仅限内部)设置作为要编辑的数据源的控件/小部件。
  •  DataBinding(实现XrwICellEditorShell)获取或(仅限内部)设置要编辑的数据属性的绑定。
  •  DataType(实现XrwICellEditorShell)获取或(仅限内部)设置要编辑的数据类型。
  •  InitialValue(实现XrwICellEditorShell)获取或(仅限内部)设置初始数据值(编辑前)。

重写的公共属性

无。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

  • FocusOut += HandleFocusOutDefault 取消实现此XrwDropDownCellEditorShell
  • ButtonRelease += HandleMenuButtonReleasetDefault 假定选择的 XrwSme 的值。

XrwSpinMenu

XrwSpinMenu 类是一个弹出式外壳,显示 XrwSme。如果空间不足以显示所有 XrwSme,则内容可以滚动。

XrwSpinMenu 类是 XrwSimpleMenu 的子类。它是菜单中唯一与窗口关联的部分,因为每个菜单项都是一个小部件。XrwSpinMenu 作为将各个菜单项绑定到一个菜单的粘合剂。与XrwSimpleMenu不同,它 可以组织比其可见区域可显示的更多的菜单项。在这种情况下,它可以将不可见的菜单项旋转到可见区域,并将可见菜单项旋转到不可见区域——为此,它会动态显示两个旋转导航器(前进和后退),如果需要的话。

此类没有公共构造函数,但有一个静态工厂方法。NewSpinMenu 创建一个新的空的XrwSpinMenu实例。通常,用户代码不需要调用工厂方法,因为XrwComboBox类默认总是创建一个旋转菜单。

由于 XrwSpinMenu 派生自 XrwOverrideShell(通过 XrwSimpleMenu),它使用 XrwOverrideShell 的机制,在 Realize() 时将其自身注册到 XrwApplicationShell 的关联外壳列表中(作为覆盖外壳)以获取转发的事件,并在 Unrealize() 时从 XrwApplicationShell 的关联外壳列表中注销自身以停止事件转发。

图像显示了一个包含 10 个菜单项 XrwSme 以及前进和后退导航器的 XrwSpinMenu

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwSimpleMenu --> XrwSpinMenu

新的事件定义

XrwSpinMenu 始终作为控件实例化。它可以自己接收事件(在 X 服务器端有一个窗口)。
无。

新的公共属性

名称 类型 访问 默认/回退
ChildCountWithoutNavigators int get  
Back XrwSme get  
Forth XrwSme get  
ShowNavigators bool get false
VisibilityStartOffset int get, set 0
VisibilityEndOffset int get, set  
  • ChildCountWithoutNavigators 获取菜单项的数量,不包括导航器。这比调用Children.Count快得多(因为导航器必须从子控件列表中排除)。
  • Back 获取后退导航器 XrwSme
  • Forth 获取前进导航器 XrwSme
  • ShowNavigators 获取当前内部状态,是否显示导航器。
  • VisibilityStartOffset 获取或设置要显示的第一个非导航器菜单项的索引。此索引不是由XrwSimpleMenu自身计算的,必须由调用者计算并设置。
  • VisibilityEndOffset 获取或设置要显示的最后一个非导航器菜单项的索引。此索引不是由XrwSimpleMenu自身计算的,必须由调用者计算并设置。

重写的公共属性 (XrwComposite)

  • Children 获取所有直接子控件的列表,不包括导航器。

新的公共方法

  • IndexOfWithoutNavigarors() 搜索指定的子控件,并返回整个子控件列表中第一个出现的零基索引。由于前进和后退导航器是前两个子控件,所以值应等于IndexOf() - 2。

重写公共方法 (XrwRectObj)

  • MinimumSize() 计算最小尺寸。
  • PreferredSize() 计算首选尺寸。
  • CalculateChildLayout() 根据子控件(如果有)的PreferredSizeExpandToAvailableHeightExpandToMaxSiblingHeightExpandToAvailableWidthExpandToMaxSiblingWidth分配可用空间,并设置AssignedSizeAssignedPosition

重写公共方法 (XrwCore)

  • Realize() 分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。

新的事件处理程序

无。

重写的事件处理程序

无。

新的预注册事件委托

  • Back.ButtonRelease += HandleBackButtonRelease() 向后滚动可见的菜单项。
  • Forth.ButtonRelease += HandleForthButtonRelease() 向前滚动可见的菜单项。

用法

XrwSpinMenu 通常与 XrwComboBox 一起使用。有关在用户自定义控件中使用XrwSpinMenu的详情,请参阅 XrwComboBox 源代码。

XrwDialogShell

XrwDialogShell 类是对话框弹出窗口的基类。

Xrw 通常将对话框视为垂直分割的窗口。顶部区域称为“内容区域”,底部区域称为“操作区域”。XrwDialogShell 可以实现为模态(阻塞应用程序)或非模态。

此类是抽象的,必须由应用程序的对话框窗口继承。

图像显示了标准的 XrwMessageBox,它是 XrwDialogShell 的预定义继承。它的“内容区域”包含一个 XrwLabel,而它的“操作区域”包含两个 XrwCommand

继承 (↑)

IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwWmShell --> XrwTransientShell --> XrwDialogShell

新的事件定义

XrwDialogShell 始终作为控件实例化。它可以自己接收事件(在 X 服务器端有一个窗口)。
无。

新的事件定义

XrwDialogShell 始终自己接收事件。

  • DialogShellEnd 在窗口管理器请求 XrwDialogShell 关闭或任何对话框内部命令强制 XrwDialogShell 关闭后发生。

新的公共属性

无。

重写的公共属性

无。

新的公共方法

无。

重写公共方法

无。

新的事件处理程序

  • OnEnd() 处理关闭 ClientMessage 事件。

重写的事件处理程序

无。

新的预注册事件委托

无。

关注点

创建具有吸引力设计的简单控件集所需的工作量令人惊讶地少。
这项工作也应鼓励其他程序员在 Linux 或类 Linux 平台上使用 Mono。

历史

本文已从文章 编程 Roma Widget Set(C# X11)——一个零依赖的 GUI 应用程序框架——第一部分,基础知识 中分离出来,使用 Roma Widget Set 的第三个公共版本,版本 ,发布于 2014 年 3 月 7 日。
Roma Widget Set 的第四个公共版本是 ,发布于 2014 年 5 月 13 日。
Roma Widget Set 的第五个公共版本是 ,发布于 2014 年 8 月 15 日。
Roma Widget Set 的第六个公共版本是 ,发布于 2014 年 10 月 3 日。
Roma Widget Set 的第七个公共版本是 ,发布于 2014 年 12 月 14 日。

© . All rights reserved.