堆栈

堆栈是一个容器,一次只显示其一个子组件。

<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>

当前可见的子组件只能通过编程方式控制;您可以使用诸如 GtkStackSwitcherGtkStackSidebar 之类的控件来让用户控制可见的子组件。

<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");

过渡效果

默认情况下,页面在变为可见时立即显示,但您可以定义过渡类型和持续时间来动画此步骤。您可以为所有页面或特定页面设置过渡类型。

// 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);

页面

每个堆栈页面都有元数据,可供其他控件(如 GtkStackSidebar)使用,例如

  • 用户可读的标题

  • 一个图标

  • 页面是否正在尝试引起注意

您可以使用 get_page() 方法获取堆栈的任何给定子组件的 GtkStackPage 实例。

组件的常用方法

  • get_pages() 方法将为您提供一个包含所有堆栈页面的 GListModel;您可以使用它来观察堆栈中添加、删除或选择的页面。

API 参考

在示例中,我们使用了以下类