在GTK中将页面重新连接到Notebook

时间:2010-06-30 05:09:18

标签: gtk#

我正在使用Notebook小部件来拉出选项卡式文件视图,并且我添加了代码以允许从现有Notebook中分离页面,这会生成一个带有单独Notebook的新窗口,其中只包含该页面。但是,我希望能够在多个笔记本之间移动页面。

Notebook.WindowCreationHook委托向我提供了页面来自的笔记本,页面小部件以及它所放置的x和y坐标,但我不知道如何判断它被放到哪个笔记本上,如果有的话。这种重新附着是否有内置机制,或者我必须通过坐标?如果我必须使用坐标,那么获取它们并获取Notebook小部件的最佳方法是什么?我可以存储我已经浮动的笔记本列表,如果需要的话,但即使这样,代码也要确定哪一个会有点难度(考虑到z顺序和所有有趣的东西)。

1 个答案:

答案 0 :(得分:3)

我决定继续自己的建议(你投票给-1,我删除了,因为它没有真正回答问题),所以在这里我再次冒着声誉。使用代码:

http://uplink.kicks-ass.net/~radu/GTK_Sharp_Notebook/

在上述地址,您会找到两个相同的档案(因为我不知道您更喜欢哪一个)。在档案中,我今天写的代码就是这样做的:

主窗口包含一个带有三个选项卡的Notebook,每个选项卡都有一个随机UI元素(按钮,日历和复选框)。您可以将选项卡拖动到主窗口之外。当您将它们放在主窗口之外时,会创建一个新窗口,其中包含一个笔记本。您刚刚删除的选项卡将显示在新窗口中。你自己到目前为止。

现在,如果您将另一个选项卡从主窗口拖到新窗口,该选项卡将添加到新窗口的笔记本中,而不是创建新窗口。

此外,如果您将所有标签拖离新窗口,返回主窗口,则会销毁新窗口(在拖动最后一个标签后)。

这件事的关键? GroupId = 0适用于所有笔记本电脑。他们处理拖拽并自行掉落。

如果你想隐藏新窗口中的选项卡(在重新连接它们之前),你可能想要查看对接小部件而不是笔记本。

注意:我在Linux下使用MonoDevelop来制作链接的应用程序。