2014-05-08 107 views
5

當用戶更改Hub控件中的視圖時,需要更改AppBar的內容。如何判斷選擇了哪個HubSection

我在使用Pivot控件時的做法是偵聽SelectionChanged事件並響應SelectIndex值。

但是,集線器只有SectionsInViewChanged事件,它返回多個部分的集合。通常,一個用戶正在與之交互,然後是相鄰的,幾乎不可見的部分。

所以我的問題是,我怎麼知道哪一個部分是當前突出顯示給用戶的部分(所以我可以相應地更改AppBar圖標)?

+1

您可以檢查是否第一個將是一個永遠奏效?或者也許是中間的?或者有一個與視口相同的最大區域。 –

+0

有['SectionsInView'](http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.hub.sectionsinview.aspx)(與「SectionsInViewChanged」 )財產/事件。 –

+0

爲了保證準確性,您不能選擇HubSection。你可能意味着哪個HubSection最受歡迎。但即使這是一個普遍意義上的複雜問題。 –

回答

13

在集線器控制中,我們可以收聽SectionsInViewChanged事件。我們可以得到這是由該顯示屏幕的HubSection:

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> 

因此,我們可以通過修改標籤內容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 
    } 
} 
+1

只有一個問題 - 我有保證SectionsInView中的第一部分是「主」部分嗎?可能發揮作用的一個因素是場所的文本方向。例如,如果文本是從右到左,那麼翻轉集線器的方向並獲取左側部分的預覽可能是有意義的,而不是正確的。 –

+0

@Jan Kratochvil,是的,SectionsInView中的第一部分是主要部分。 –

+1

只要記住,這不是一個可靠的技術。 SectionsInView [0]不保證返回主HubSection。這是因爲GridView的ScrollViewer可以有一箇中心的SnapAlignment,它使[0]成爲前一個和[1]主HubSection。 Far的SnapAlignment會導致潛在的相同的誤報。每個應用程序都需要自行決定 - 因爲作爲一個例子,您可以同時看到5個HubSections - 在這種情況下,什麼會被視爲「主要」HubSection?這是一個逐案的事情,但SectionsInView是開始的地方。 –

相關問題