堆栈¶
堆栈是一个容器,一次只显示其一个子组件。
<object class="GtkStack" id="stack">
<child>
<object class="GtkStackPage">
<property name="name">beginning</property>
<property name="title" translatable="yes">In the beginning…</property>
<property name="child">
<object class="GtkLabel">
<property name="label" translatable="yes">It was dark</property>
</object>
</property>
</object>
</child>
<child>
<object class="GtkStackPage">
<property name="name">end</property>
<property name="title" translatable="yes">The End</property>
<property name="child">
<object class="GtkLabel">
<property name="label" translatable="yes">They all lived happily ever after.</property>
</object>
</property>
</object>
</child>
</object>
当前可见的子组件只能通过编程方式控制;您可以使用诸如 GtkStackSwitcher 或 GtkStackSidebar 之类的控件来让用户控制可见的子组件。
<object class="GtkStackSwitcher" id="stack-switcher">
<!-- "stack" is the GtkStack we defined above -->
<property name="stack">stack</property>
</object>
更改可见页面¶
您可以通过 GtkStackPage 名称,或者使用您想要显示的子组件来更改可见页面
gtk_stack_set_visible_child_name (GTK_STACK (stack), "beginning");
stack.set_visible_child_name("beginning")
stack.visible_child_name = "beginning";
stack.visible_child_name = "beginning";
过渡效果¶
默认情况下,页面在变为可见时立即显示,但您可以定义过渡类型和持续时间来动画此步骤。您可以为所有页面或特定页面设置过渡类型。
// Default transition
gtk_stack_set_transition_type (GTK_STACK (stack),
GTK_STACK_TRANSITION_TYPE_CROSSFADE);
// Show the "end" page using a 3D transition
gtk_stack_set_visible_child_full (GTK_STACK (stack), "end",
GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT);
# Default transition
stack.props.transition_type = Gtk.StackTransitionType.CROSSFADE
# Show the "end" page using a 3D transition
stack.set_visible_child_full("end", Gtk.StackTransitionType.ROTATE_RIGHT)
// Default transition
stack.transition_type = Gtk.StackTransitionType.CROSSFADE;
// Show the "end" page using a 3D transition
stack.set_visible_child_full ("end", Gtk.StackTransitionType.ROTATE_RIGHT);
// Default transition
stack.transition_type = Gtk.StackTransitionType.CROSSFADE;
// Show the "end" page using a 3D transition
stack.set_visible_child_full("end", Gtk.StackTransitionType.ROTATE_RIGHT);
页面¶
每个堆栈页面都有元数据,可供其他控件(如 GtkStackSidebar)使用,例如
用户可读的标题
一个图标
页面是否正在尝试引起注意
您可以使用 get_page() 方法获取堆栈的任何给定子组件的 GtkStackPage 实例。
组件的常用方法¶
get_pages()方法将为您提供一个包含所有堆栈页面的GListModel;您可以使用它来观察堆栈中添加、删除或选择的页面。
API 参考¶
在示例中,我们使用了以下类