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





5.00/5 (10投票s)
如何用 C# 高效地开发 Linux/Unix (X11) GUI 应用程序,而无需依赖 GTK 或 KDE 等 GUI 框架。复合控件的说明。
引言
本文仅包含Roma Widget Set (Xrw) 复合控件的描述。之所以创建本文,是因为整个主题扩展到 50 多页,所以我决定将其分为三个部分,其中包含 ,并分为四个部分,其中包含
。
原始文章:编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 基础。它包含一般性描述,并且始终应作为您的首选参考。
分离出的文章:编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 内置控件。它仅包含内置控件的参考描述。
分离出的文章:编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 简单控件。它仅包含简单控件的参考描述。
本篇分离出的文章:编程 Roma Widget Set (C# X11) - 一个零依赖的 GUI 应用程序框架 - 复合控件。它仅包含复合控件的参考描述。
下面描述的所有功能都可以标记为
版本 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
的子类。它评估子控件的约束 ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和 ExpandToMaxSiblingWidth
,并在适当的时候调整子控件的大小。
此类没有公共构造函数,但有四个静态工厂方法。NewHBoxWidget
/NewHBoxGadged
创建一个水平方向子控件放置的新 XrwBox
,NewVBoxWidget
/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 |
获取或设置子控件对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当存在剩余空间可供对齐时,对齐方式才生效。(这意味着ChildAlign
ExpandToMaxSiblings*
不会占用全部空间,并且任何子控件都不会设置ExpandToAvailable*
。)
获取子控件放置方向。Orientation
重写的公共属性 (XrwVisibleRectObj)
指示是否将高度扩展到可用高度(由其所在的ExpandToAvailableHeight
XrwComposite
定义)。
指示是否将宽度扩展到可用宽度(由其所在的ExpandToAvailableWidth
XrwComposite
定义)。
新的公共方法
无。
重写公共方法 (XrwRectObj)
根据子控件的CalculateChildLayout()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
将可用空间分配给子控件(如果有),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。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 |
获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。SelectedColor
以 HTML 名称获取当前选定的颜色。SelectedColorHTML
获取或设置当前选定的颜色,其值为色相、饱和度和亮度颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。SelectedColorHSL
重写的公共属性
无。
特定的静态方法
将 RGB 颜色值转换为 HSL 颜色值。RgbToHsl
将 HSL 颜色值转换为 RGB 颜色值。HslToRgb
新的公共方法
无。
重写公共方法
无。
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
无。
用法
示例代码展示了如何使用 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)
在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。Realize()
重写公共方法 (XrwComposite)
将指定的AddChild()
XrwCore
添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略null
指针。
将指定的AddChild()
XrwCore
添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略null
指针。此方法调用OnChildAdded()
事件处理程序。
将指定的InsertChild()
XrwCore
添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略null
指针。
将指定的InsertChild()
XrwCore
添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略null
指针。此方法调用OnChildAdded()
事件处理程序。
未实现。RemoveChild()
新的事件处理程序
处理 TabSelectionChanged 事件。OnTabSelectionChanged()
重写的事件处理程序
无。
新的预注册事件委托
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 中没有边框的单选按钮组的表示相当。
XrwRadioBox
类是 XrwConstraint
的子类,它实现了其单选按钮子控件中一次只能选择一个。
此类没有公共构造函数,但有两个静态工厂方法。NewHRadioBoxGadget
创建一个水平方向子控件的新 XrwRadioBox
,NewVRadioBoxGadget
创建一个垂直方向子控件的新 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(文件管理器)路径栏。
XrwSpinBox
类是 XrwConstraint
的子类,它可以组织比其可见区域更多的子控件。在这种情况下,它可以将不可见的子控件旋转到可见区域,并将可见子控件旋转到不可见区域 - 因此,如果需要,它会动态显示两个旋转导航器(前进和后退)。
此类没有公共构造函数,但有四个静态工厂方法。NewHSpinBoxWidget
/NewHSpinBoxGadget
创建一个水平方向子控件放置的新 XrwSpinBox
,NewVSpinBoxWidget
/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()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
将可用空间分配给子控件(如果有),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。Realize()
重写公共方法 (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()
PreferredSize
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
(因为功能区有固定高度,所以不考虑ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)将可用空间分配给子控件(功能区选项卡),并设置AssignedSize
和AssignedPosition
。MinimumSize()
计算最小尺寸。PreferredSize()
计算首选尺寸。
重写公共方法 (XrwCore)
重绘控件/小部件Redraw()
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
无。
子控件约束
子控件约束可以通过 SetChildConstraints()
设置,包括边距(左、右、上、下)、放置锚点(起始列和行)以及尺寸锚点(列跨度和行跨度)。根据约束,子控件可能会重叠。
XrwColorSelectorGridForm
XrwColorSelectorGridForm
类使用预定义的列和行网格来排列 XrwLabelAndColor
子控件。它旨在作为控件创建,以小部件形式持有子控件(以节省内存和 X 服务器通信),并将其事件转发给子控件。布局与其基类 XrwGridForm 保持不变。
XmColorSelecrorGridForm 是一个控件,它提供一个可选择的预定义颜色网格。
此类没有公共构造函数,但有几个静态工厂方法。NewColorSelectorGridForm16
创建一个包含 16 种可选预定义颜色的新 XrwColorSelectorGridForm
。NewColorSelectorGridForm140
创建一个包含 140 种可选预定义颜色的新 XrwColorSelectorGridForm
(X11 定义了 140 种命名颜色)。
图像显示了一个 XrwColorSelectorGridForm
,它有 2 列(固定宽度)和 8 行(固定高度),包含 16 个 XrwLabelAndColor
子控件,每个控件显示一个颜色矩形和颜色名称。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwConstraint --> XrwGridForm --> XrwColorSelectorGridForm
新的事件定义
XrwColorSelectorGridForm
始终实例化为控件。它可以在 X 服务器端拥有自己的窗口,从而接收事件。
ColorSelected
在选择预定义颜色之一后发生,并调用已注册的事件处理程序委托。
新的公共属性
名称 | 类型 | 访问 | 默认/回退 |
SelectedChildBorderColor | ![]() ![]() ![]() |
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
类使用预定义的列和行网格来排列其子控件 XrwHslColorPanel
和 XrwHslColorPanel
。
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 |
获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。SelectedColor
以 HTML 名称获取当前选定的颜色。SelectedColorHTML
重写的公共属性
无。
新的公共方法
无。
重写公共方法
无。
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
无。
用法
示例代码展示了如何使用 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 |
获取或设置当前选定的颜色,其值为红、绿、蓝颜色分量,范围均为 0 ... 255 (0x00 ... 0xFF)。SelectedColor
以 HTML 名称获取当前选定的颜色。SelectedColorHTML
重写的公共属性
无。
新的公共方法
无。
重写公共方法
无。
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
无。
用法
示例代码展示了如何使用 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 控件混乱。
此类没有公共构造函数,但有两个静态工厂方法。NewHPanedWidget
或 NewVPanedWidget
创建一个水平或垂直方向的 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 | ![]() ![]() ![]() |
get, set | PanerBackgroundColorDark |
PanerBackgroundColorLight | ![]() ![]() ![]() |
get, set | PanerBackgroundColorLight |
PanerBackgroundColorMedium | ![]() ![]() ![]() |
get, set | PanerBackgroundColorMedium |
获取或设置子控件对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当存在剩余空间可供对齐时,对齐方式才生效。(这意味着ChildAlign
XrwVisibleRectObj.ExpandToMaxSiblings*
,设置为任何数量的子控件,都不会占用全部空间,并且XrwVisibleRectObj.ExpandToAvailable*
不会为任何子控件设置。)
获取子控件放置方向。Orientation
获取或设置窗格之间背景色的 3/3。PanerBackgroundColorDark
获取或设置窗格之间背景色的 1/3。PanerBackgroundColorLight
获取或设置窗格之间背景色的 2/3。PanerBackgroundColorMedium
重写的公共属性 (XrwComposite)
无。
新的公共方法
无。
重写公共方法 (XrwRectObj)
根据子控件的CalculateChildLayout()
PreferredSize
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
(因为功能区有固定高度,所以不考虑ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)将可用空间分配给子控件(功能区选项卡),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
无。
新的事件处理程序
无。
重写事件处理程序 (XrwRectObj)
处理 ExposeEvent 事件。OnExpose()
新的预注册事件委托
什么也不做。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()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
将可用空间分配给子控件(如果有),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。Realize()
重写公共方法 (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 | ![]() ![]() ![]() |
get, set | XrwTheme.TextColor |
![]() |
X11FontData | get | != null |
TextColor | ![]() ![]() ![]() |
get, set | XrwTheme.TextColor |
![]() ![]() ![]() |
X11FontData | get | != null |
![]() |
字符串 | get | |
![]() |
IntPtr | get | IntPtr.Zero |
![]() |
字符串 | get | |
![]() |
IntPtr | get | IntPtr.Zero |
SelectedBackground- ColorDark |
![]() ![]() ![]() |
get, set | XrwTheme.EditableBackground- Color |
SelectedBackground- ColorLight |
![]() ![]() ![]() |
get, set | XrwTheme.EditableBackground- Color |
SelectedBackground- ColorMedium |
![]() ![]() ![]() |
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 表示初始使用的系统默认字体。此字体用于在标题区域显示当前分配对象的类型,在树中显示分支节点,以及在描述区域显示当前选中属性的名称。
获取或设置选定属性节点的背景色 3/3。SelectedBackgroundColorDark
SelectedBackgroundColor*
颜色通常不明显,因为可编辑的正方形没有渐变。
获取或设置选定属性节点的背景色 1/3。SelectedBackgroundColorLight
SelectedBackgroundColor*
颜色通常不明显,因为可编辑的正方形没有渐变。
获取或设置选定属性节点的背景色 2/3。SelectedBackgroundColorMedium
SelectedBackgroundColor*
颜色通常不明显,因为可编辑的正方形没有渐变。
获取或设置当前分配的对象。SelectedObject
获取或设置是否显示描述区域。ShowDescription
注意:SelectedBackgroundColor*
(继承自 XrwVisibleRectObj
)颜色通常不明显,因为可编辑的正方形没有渐变。
重写的公共属性
无。
新的公共方法
设置新的粗体字体。SetBoldFont()
重写公共方法 (XrwRectObj)
将可用空间(标题区域、树和描述区域是CalculateChildLayout()
XrwPropertyGrid
的组成部分,会减少可用空间)根据子控件的PreferredSize
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
(因为功能区有固定高度,所以不考虑ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)分配给子控件,并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
SetFont()
SetDefaultFont()
设置新的默认字体。
重写公共方法 (XrwComposite)
不支持添加子控件。树的视口是唯一的子控件。AddChild()
不支持插入子控件。树的视口是唯一的子控件。InsertChild()
不支持移除子控件。树的视口是唯一的子控件。RemoveChild()
新的事件处理程序
无。
重写的事件处理程序
无。
预注册事件委托
处理属性网格树的 EntrySelectionChanged 事件。EntrySelectionChanged += HandleTreeEntrySelectionChanged
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 |
![]() |
StyleList | get | != null |
![]() |
StyleList | get | != null |
![]() ![]() |
TPixel | get, set | XrwTheme.TextColor |
![]() ![]() |
TPixel | get, set | XrwTheme.ShadowFrameColorDark |
RibbonTabCaption- BackgroundColorDark |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- BackgroundColor |
RibbonTabCaption- BackgroundColorLight |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- BackgroundColor |
RibbonTabCaption- BackgroundColorMedium |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- BackgroundColor |
RibbonTabCaptionFocused- BackgroundColorDark |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- FocusedBackgroundColor |
RibbonTabCaptionFocused- BackgroundColorLight |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- FocusedBackgroundColor |
RibbonTabCaptionFocused- BackgroundColorMedium |
![]() ![]() ![]() |
get, set | XrwTheme.RibbonTabCaption- FocusedBackgroundColor |
获取或设置应用程序按钮的标签文本。ApplicationButtonLabel
获取应用程序按钮的位图。ApplicationButtonBitmap
获取应用程序按钮的位图共享标志。未共享的位图将在ApplicationBitmapShared
XrwRibbon
的Dispose()
中被释放,共享的位图则不会。
获取要弹出的关联应用程序菜单。AppMenu
InactiveStyles
获取用于绘制功能区按钮标签的非活动文本的样式列表。NormalStyles
获取用于绘制功能区按钮标签的正常文本的样式列表。TextColor
获取或设置功能区按钮标签的文本颜色。已成为NormalStyles
的一部分。InactiveTextColor
获取或设置非活动功能区按钮标签的文本颜色。已成为InactiveStyles
的一部分。
获取或设置功能区选项卡标题背景色的 3/3。RibbonTabCaptionBackgroundColorDark
获取或设置功能区选项卡标题背景色的 1/3。RibbonTabCaptionBackgroundColorLight
获取或设置功能区选项卡标题背景色的 2/3。RibbonTabCaptionBackgroundColorMedium
获取或设置功能区选项卡标题焦点背景色的 3/3。RibbonTabCaptionFocusedBackgroundColorDark
获取或设置功能区选项卡标题焦点背景色的 1/3。RibbonTabCaptionFocusedBackgroundColorLight
获取或设置功能区选项卡标题焦点背景色的 2/3。RibbonTabCaptionFocusedBackgroundColorMedium
获取或设置应用程序按钮的标签文本。ApplicationButtonLabel
获取应用程序按钮的位图。ApplicationButtonBitmap
获取应用程序按钮的位图共享标志。未共享的位图将在ApplicationBitmapShared
XrwRibbon
的Dispose()
中被释放,共享的位图则不会。
重写的公共属性 (XrwRectObj)
现在为只读。BorderWidth
重写的公共属性 (XrwVisibleRectObj)
现在不支持设置。FrameWidth
现在不支持设置。ExpandToAvailableHeight
新的公共方法
设置应用程序按钮的位图和位图共享标志。SetApplicationButtonBitmap()
获取当前选中的选项卡。可能为 null。GetSelectedTab()
GetTextColor()
获取指定功能区选项卡的文本颜色。替换了getter属性TextColor
。默认值为 XrwTheme.TextColor。SetSelectedTab()
选择指定的选项卡。SetTextColor()
设置指定功能区选项卡的文本颜色。替换了setter属性TextColor
。
重写公共方法 (XrwRectObj)
根据子控件的CalculateChildLayout()
PreferredSize
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
(因为功能区有固定高度,所以不考虑ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)将可用空间分配给子控件(功能区选项卡),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
返回所有带窗口的子控件的集合AllWindowedWidgets()
在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。Realize()
重绘控件/小部件。Redraw()
在 X 服务器上取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)。使对象不可见。Unrealize()
重写公共方法 (XrwComposite)
将指定的AddChild()
XrwRobbonTab
添加到子控件列表的尾部。没有检查以防止重复添加同一个子控件。忽略null
指针。选择最后添加的子控件。
将指定的InsertChild()
XrwRibbonTab
添加到指定位置的子控件列表(或回退到尾部)。没有检查以防止重复添加同一个子控件。忽略null
指针。选择最后添加的子控件。
新的事件处理程序
无。
重写事件处理程序 (XrwRectObj)
处理 ExposeEvent 事件。OnExpose()
新的预注册事件委托
应用程序按钮的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 | ![]() ![]() ![]() |
get, set | XrwTheme.RibbonPanelText- BackgroundColor |
TextColor | ![]() ![]() ![]() |
get, set | XrwTheme.TextColor |
Label
获取或设置标签文本。
获取或设置面板标签的背景颜色。TextBackgroundColor
TextColor
获取或设置面板标签的文本颜色。
重写的公共属性 (XrwRectObj)
现在为只读。BorderWidth
现在是只读的。FrameWidth
新的公共方法
计算面板标签的显示区域。TextBoxArea
计算面板对话框启动器按钮区域。DialogLauncherArea
检查给定点是否在面板对话框启动器按钮区域内。InsideDialogLauncherBoundings
重写公共方法 (XrwRectObj)
根据子控件(命令控件和控件组)的CalculateChildLayout()
PreferredSize
(但忽略ExpandToAvailableWidth
、ExpandToMaxSiblingWidth
、ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)分配可用空间,并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。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
(但忽略ExpandToAvailableWidth
、ExpandToMaxSiblingWidth
、ExpandToAvailableHeight
和ExpandToMaxSiblingHeight
)分配可用空间,并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。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
的水平位置——以及受控的 Child
。Child
是唯一用户定义的控件,必须通过AddChild()
或InsertChild()
分配,可以是任何XrwCore
或其派生类。
此类没有公共构造函数,但有两个工厂方法。NewViewportWidget
/NewViewportGadged
创建一个新的XrwViewport
。
图像展示了 XrwViewport
的通用功能。
从此版本开始,
XrwViewport
有了一个新的整体部分,即 XrwViewportGridViewHeader
控件——它将由 XrwViewport
自动创建和销毁。XrwViewportGridViewHeader
负责显示 XrwViewport
的列标题名称,但没有内部标题数据。它而是从 Child
获取标题数据。Child
属性支持任何 XrwCore
或其派生类,但只有当 Child
实现 XrwIGridView
接口时,XrwViewportGridViewHeader
才会显示列标题名称,否则它将保持为空。无论 Child
是否实现 XrwIGridView
接口,都可以通过HeaderVisibility
属性控制标题的可见、隐藏或折叠,并且可以通过HeaderPreferredHeight
属性定义标题的首选大小。
目前,XrwList
和 XrwTree
实现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 |
![]() ![]() ![]() |
get, set | XrwTheme.Interactive- BackgroundColorDark |
HeaderBackground- ColorLight |
![]() ![]() ![]() |
get, set | XrwTheme.Interactive- BackgroundColorLight |
HeaderBackground- ColorMedium |
![]() ![]() ![]() |
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
获取或设置网格视图列标题的背景颜色 3/3。HeaderBackgroundColorDark
获取或设置网格视图列标题的背景颜色 1/3。HeaderBackgroundColorLightm
获取或设置网格视图列标题的背景颜色 2/3。HeaderBackgroundColorMedium
获取或设置网格视图列标题的首选高度。HeaderPreferredHeight
获取或设置网格视图列标题的可见性。HeaderVisibility
获取实现水平滚动的控件。HScroll
获取实现垂直滚动的控件。VScroll
获取或设置滚动控件的框架类型。ScrollFrameType
获取或设置滚动控件的框架宽度。ScrollFrameWidth
区分顶部或底部对齐的水平滚动条。UseBottom
区分左侧或右侧对齐的垂直滚动条。UseRight
获取水平滚动条当前是否可见。ShowHScroll
获取垂直滚动条当前是否可见。ShowVScroll
获取子控件第一个列的 x 坐标偏移量。如果子控件已水平滚动,则为负值。ScrollOffsetX
获取子控件第一个行的 y 坐标偏移量。如果子控件已垂直滚动,则为负值。ScrollOffsetY
重写的公共属性 (XrwComposite)
获取所有直接子控件的列表。Children
新的公共方法
RealizeChild()
实现指定的子控件并取消实现(隐藏)先前实现的子控件。
重写公共方法 (XrwRectObj)
根据子控件的CalculateChildLayout()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
将可用空间分配给子控件(如果有),并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写的公共方法 (XrwCore>)
在 X 服务器上分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)。使对象可见。Realize()
重写公共方法 (XrwComposite)
虽然 XrwViewport
派生自 XrwComposite
,但只支持 ONE 个子控件。
AddChild()
将指定的XrwCore
添加到子控件列表的尾部位置。没有检查以防止重复添加相同的子控件。移除先前的子控件(只允许一个子控件)。忽略null
指针。
将指定的InsertChild()
XrwCore
添加到子控件列表的指定位置(或作为备选的尾部位置)。没有检查以防止重复添加相同的子控件。移除先前的子控件(只允许一个子控件)。忽略null
指针。
从子控件列表中移除指定的RemoveChild()
XrwCore
。忽略null
指针。
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
XrwViewport
不会自己注册事件处理程序,但它会为每个 XrwScrollbar
子控件注册一个 ScrollResponse
事件处理程序。
和ThumbMoved += HandleHScrollResponseDefault
ThumbMoved += HandleVScrollResponseDefault
在XrwScrollbar
子控件上更新受控子控件的位置。
用法
请参阅文章 释放列表和树控件的强大功能(X11) 以获取示例代码和有关应用程序的详细信息。
XrwBaseCellEditorShell
XrwBaseCellEditorShell
是用于弹出式单元格编辑器的抽象基类,这些编辑器是XrwList
和XrwTree
进行就地编辑所必需的。它实现了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
XrwGenericCellEditorShell
为 XrwList
和 XrwTree
的文本值单元格的就地编辑提供了一个弹出式单元格编辑器。
通用单元格编辑器外壳用作就地编辑列表或树单元格的弹出文本值编辑器。
此类没有公共构造函数,但有一个静态工厂方法。NewGenericCellEditorShell
创建一个新的空的XrwGenericCellEditorShell
实例。通常,用户代码不需要调用工厂方法,因为XrwBaseCellEditorShell
的静态FindCellEditor
方法会在需要时创建一个实例。
继承 (↑)
IDisposable --> XrwObject --> XrwRectObject --> XrwVisibleRectObj --> XrwCore --> XrwComposite --> XrwShell --> XrwOverrideShell --> XrwBaseCellEditorShell --> XrwGenericCellEditorShell.
新的事件定义
无。
新的公共属性
无。
重写的公共属性
无。
新的公共方法
无。
重写公共方法 (XrwRectObj)
CalculateChildLayout()
将可用空间分配给子控件(文本编辑器)。编辑器外壳作为列单元格的叠加层弹出进行编辑,并且必须符合单元格的尺寸。
新的事件处理程序
无。
重写的事件处理程序
无。
预注册事件委托
FocusOut += HandleFocusOutDefault
取消实现此XrwGenericCellEditorShell
。
XrwRibbonAppMenu
XrwRibbonAppMenu
是 XrwRibbon
的弹出式应用程序菜单,显示 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
CommandPanel
和DetailPanel
中不扩展到可用宽度的子控件的水平对齐方式。0.0 表示左对齐,0.5 表示居中对齐,1.0 表示右对齐。该值不能小于 0.0 或大于 1.0。仅当有剩余空间可供对齐时,对齐方式才生效。(这意味着,expand-to-max-siblings-*
不使用全部空间,并且没有子控件设置expand-to-available-*
。)
获取命令面板(左侧应用程序菜单面板)。CommandPanel
获取详细信息面板(右侧应用程序菜单面板)。DetailsPanel
获取或设置命令面板和详细信息面板之间的水平间距。该值不能小于 0 或大于 400。HorzSpacing
UnrealizeTimeStamp
获取最后一次Unrealize()
调用时的时间戳(毫秒 + 秒 * 1000 + 分钟 * 60000 + 小时 * 3600000)。这可用于区分在上次Unrealize()
调用后发生的非期望的Realize()
调用和期望的Realize()
调用。
重写的公共属性
无。
新的公共方法
无。
重写公共方法 (XrwRectObj)
根据子控件(命令面板和详细信息面板)的CalculateChildLayout()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
分配可用空间,并设置AssignedSize
和AssignedPosition
。
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
Redraw()
重绘控件/小部件。
分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。Realize()
取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象不可见。Unrealize()
重写公共方法 (XrwComposite)
不支持。唯一的永久子控件是包含AddChild()
CommandPanel
和DetailPanel
的水平框。
不支持。唯一的永久子控件是包含InsertChild()
CommandPanel
和DetailPanel
的水平框。
不支持。唯一的永久子控件是包含RemoveChild()
CommandPanel
和DetailPanel
的水平框。
新的事件处理程序
无。
重写事件处理程序 (XrwRectObj)
无。
新的预注册事件委托
设置焦点。Enter += HandleEnterDefault
取消焦点。Leave += HandleLeaveDefault
HandleCommandPannelChildAddedDefault。FocusIn += HandleFocusInDefault
取消实现此FocusOut += HandleFocusOutDefault
XrwSimpleMenu
。
设置或取消设置相应的Motion += HandleMotionDefault
XrwSme
的焦点并调用InvokeRedraw()
。
调用所有相应的ButtonRelease += HandleButtonReleaseDefault
XrwSme
的OnButtonRelease()
。
将CommandPanel.ChildAdded += HandleCommandPannelChildAddedDefault
XrwRibbonAppMenu
注册到新的命令面板子控件,并调整样式(颜色、边距等),如果新命令面板子控件的类型为.HandleCommandButtonReleaseDefault
XrwSme
。XrwRibbonAppMenu
事件处理程序调用.HandleCommandButtonReleaseDefault
Unrealize()
来处理XrwRibbonAppMenu
。
将DetailsPanel.ChildAdded += HandleDetailsPannelChildAddedDefault
XrwRibbonAppMenu
注册到新的详细信息面板子控件,并调整样式(颜色、边距等),如果新的详细信息面板子控件的类型为.HandleDetailsPannelChildAddedDefault
XrwSme
。XrwRibbonAppMenu
事件处理程序调用.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
实例。通常,用户代码不需要调用工厂方法,因为XrwMenuButton
和XrwRibbonSplitButton
类默认总是创建一个简单菜单。
由于 XrwSimpleMenu
派生自 XrwOverrideShell
,它使用 XrwOverrideShell
的机制,在 Realize()
时将其自身注册到 XrwApplicationShell
的关联外壳列表中(作为覆盖外壳)以获取转发的事件,并在 Unrealize()
时从 XrwApplicationShell
的关联外壳列表中注销自身以停止事件转发。
图像显示了一个包含两个 XrwSme
的 XrwSimpleMenu
。
继承 (↑)
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()
XrwRectObj
的CalculateChildLayout
,因为它不需要参数。
重写公共方法 (XrwRectObj)
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
重写公共方法 (XrwCore)
分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。Realize()
取消映射并释放关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象不可见。Unrealize()
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
无操作。FocusIn += HandleFocusInDefault
取消实现此FocusOut += HandleFocusOutDefault
XrwSimpleMenu
。
设置或取消设置相应的Motion += HandleMotionDefault
XrwSme
的焦点并调用InvokeRedraw()
。
处理所有相应的ButtonPress += HandleButtonPressDefault
XrwSme
的OnButtonPress()
。
处理所有相应的ButtonRelease += HandleButtonReleaseDefault
XrwSme
的OnButtonRelease()
。
将ChildAdded += HandleChildAddedDefault
XrwSimpleMenu.HandleChildButtonReleaseDefault
注册到新子控件。此事件处理程序调用Unrealize()
来处理XrwSimpleMenu
。
用法
XrwSimpleMenu
通常与 XrwMenuButton
一起使用。有关 XrwSimpleMenu
用法详情,请参阅 XrwMenuButton。
XrwDropDownCellEditorShell
XrwDropDownCellEditorShell
为 XrwList
和 XrwTree
的可枚举值单元格的就地编辑提供了一个弹出式单元格编辑器。它实现了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
类是 Xrw
Simple
Menu
的子类。它是菜单中唯一与窗口关联的部分,因为每个菜单项都是一个小部件。XrwSpinMenu
作为将各个菜单项绑定到一个菜单的粘合剂。与Xrw
Simple
Menu
不同,它 可以组织比其可见区域可显示的更多的菜单项。在这种情况下,它可以将不可见的菜单项旋转到可见区域,并将可见菜单项旋转到不可见区域——为此,它会动态显示两个旋转导航器(前进和后退),如果需要的话。
此类没有公共构造函数,但有一个静态工厂方法。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
Xrw
Simple
Menu
自身计算的,必须由调用者计算并设置。
获取或设置要显示的最后一个非导航器菜单项的索引。此索引不是由VisibilityEndOffset
Xrw
Simple
Menu
自身计算的,必须由调用者计算并设置。
重写的公共属性 (XrwComposite)
获取所有直接子控件的列表,不包括导航器。Children
新的公共方法
搜索指定的子控件,并返回整个子控件列表中第一个出现的零基索引。由于前进和后退导航器是前两个子控件,所以值应等于IndexOfWithoutNavigarors()
IndexOf()
- 2。
重写公共方法 (XrwRectObj)
计算最小尺寸。MinimumSize()
计算首选尺寸。PreferredSize()
根据子控件(如果有)的CalculateChildLayout()
PreferredSize
、ExpandToAvailableHeight
、ExpandToMaxSiblingHeight
、ExpandToAvailableWidth
和ExpandToMaxSiblingWidth
分配可用空间,并设置AssignedSize
和AssignedPosition
。
重写公共方法 (XrwCore)
分配并映射关联窗口的资源(如果对象是控件/有自己的窗口)在 X 服务器上。使对象可见。Realize()
新的事件处理程序
无。
重写的事件处理程序
无。
新的预注册事件委托
向后滚动可见的菜单项。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
关闭后发生。
新的公共属性
无。
重写的公共属性
无。
新的公共方法
无。
重写公共方法
无。
新的事件处理程序
处理关闭 ClientMessage 事件。OnEnd()
重写的事件处理程序
无。
新的预注册事件委托
无。
关注点
创建具有吸引力设计的简单控件集所需的工作量令人惊讶地少。
这项工作也应鼓励其他程序员在 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 日。