Windows runtime 我怎样才能知道选择了哪个HubbSection

Windows runtime 我怎样才能知道选择了哪个HubbSection,windows-runtime,winrt-xaml,windows-phone-8.1,Windows Runtime,Winrt Xaml,Windows Phone 8.1,当用户更改集线器控件中的视图时,我需要更改AppBar的内容 我在使用Pivot控件时的做法是监听SelectionChanged事件并响应SelectIndex值 但是,中心只有一个SectionsInViewChanged事件,它返回多个节的集合。通常,一个用户与相邻的、几乎看不见的部分进行交互 因此,我的问题是,我如何判断哪个部分是当前突出显示给用户的部分(以便我可以相应地更改AppBar图标)?在Hub control中,我们可以收听SectionsInViewChanged事件。我们可

当用户更改集线器控件中的视图时,我需要更改AppBar的内容

我在使用Pivot控件时的做法是监听SelectionChanged事件并响应SelectIndex值

但是,中心只有一个SectionsInViewChanged事件,它返回多个节的集合。通常,一个用户与相邻的、几乎看不见的部分进行交互


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

在Hub control中,我们可以收听
SectionsInViewChanged
事件。我们可以通过以下方式获得屏幕上显示的轮毂部分:

var section = hubDemo.SectionsInView[0];
hubDemo
是我的集线器控件的名称。我们可以为每个HubSection设置
Tag
属性。例如:

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

你能检查一下第一个是否总是有效的吗?或者中间的那个?或具有与视图端口公用的最大区域的视图。有(与
SectionsInViewChanged
)属性/事件。为了准确起见,您不能选择HubSection。你的意思可能是哪个区域最容易看到。但即使从一般意义上来说,这也是一个很复杂的问题。只有一个问题——我能保证SectionsInView中的第一部分是“主要”部分吗?一个可能起作用的因素是语言环境的文本方向。例如,如果文本是从右到左的,则翻转中心的方向并预览左侧部分(而不是右侧部分)可能是有意义的。请记住,这不是一种可靠的技术。SectionsInView[0]不保证返回主轮毂部分。这是因为GridView的ScrollViewer可以有一个中心对齐,使[0]成为上一个部分,[1]成为主要部分。Far的对齐可能会导致相同的假阳性。每个应用程序都需要自己决定这一点——因为,作为一个例子,您可以同时看到5个HubSection——在这种情况下,“主”HubSection是什么?这是逐案处理的事情,但是SectionsInView是开始的地方。@ChrisShao如果我尝试SectionsInViewChanged事件,我只有在应用程序第一次启动时才得到它。如果我使用触摸功能更改节,则不会触发SectionsInViewChanged事件。你知道这里有什么问题吗?@user2025830:看起来如果轮毂只包含两个轮毂Section,则不会引发
SectionsInViewChanged
。当轮毂只包含两个轮毂Section时,SectionsInViewChanged不会激发。这是有道理的,因为有两个部分它们总是可见的(一个完整,一个部分)。显然,当您想要确定当前选择哪一个时,这没有帮助。
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
    }
}