如何判断选择了哪个HubSection

Jan*_*vil 5 windows-runtime winrt-xaml windows-phone-8.1

当用户更改Hub控件中的视图时,我需要更改AppBar的内容.

我在使用Pivot控件时执行此操作的方式是侦听SelectionChanged事件并响应SelectIndex值.

但是,集线器只有一个SectionsInViewChanged事件,它返回多个部分的集合.通常,一个用户与相邻的,几乎不可见的部分进行交互.

所以我的问题是,我如何判断哪个部分是当前显着向用户显示的部分(因此我可以相应地更改AppBar图标)?

Chr*_*hao 13

在Hub控制中,我们可以收听此SectionsInViewChanged事件.我们可以得到这个显示在屏幕上的HubSection:

var section = hubDemo.SectionsInView[0];
Run Code Online (Sandbox Code Playgroud)

hubDemo是我的Hub控件的名称.我们可以Tag为每个HubSection 设置属性.例如:

<Hub x:Name="hubDemo" SectionsInViewChanged="demoHub_SectionsInViewChanged">
    <HubSection Tag="0" Header="Section1" Width="800"/>
    <HubSection Tag="1" Header="Section2" Width="400"/>
    <HubSection Tag="2" Header="Section3" Width="400"/>
    <HubSection Tag="3" Header="Section4" Width="400"/>
    <HubSection Tag="4" Header="Section5" Width="600"/>
</Hub>
Run Code Online (Sandbox Code Playgroud)

所以我们可以按标签更改AppBar内容:

private void demoHub_SectionsInViewChanged(object sender, SectionsInViewChangedEventArgs e)
{
    var section = hubDemo.SectionsInView[0];
    var tag = section.Tag.ToString();
    switch (tag)
    {
        // Change your AppBar by tag
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ChrisShao如果我尝试SectionsInViewChanged事件,我只会在第一次启动应用程序时获取它.如果我使用touch functionallity更改部分,则不会触发SectionsInViewChanged事件.你知道这里的问题吗? (2认同)
  • @ user2025830:如果Hub只包含两个HubSection,则看起来不会引发`SectionsInViewChanged`. (2认同)