2013-01-22 77 views
1

我提前道歉,這個人是很難解釋。如何停止AppBar在打開時捕獲觸摸活動?

我有一個GridView全是可選擇拼貼的。當進行選擇時,通過將IsOpen和IsSticky設置爲true來顯示底部的AppBar。這工作正常。

然而,當AppBar第一選擇後出現,它捕獲任何觸摸活動,然後任何觸摸到AppBar之外的區域之後將其釋放,但觸摸手勢被吸收。我最終觸摸屏幕兩次以執行第二次選擇。

在Windows 8的開始屏幕,你可以選擇多個瓦片此起彼伏的無縫連接。出現的底部欄不會干擾後續的觸摸手勢。但在我的應用程序中,條形圖捕獲第一個手勢,並最終選擇第二個磁貼兩次。這會讓我的應用感覺沒有反應。

我該如何解決這個問題?在Visual Studio 2012

2)在GroupedItemsPage.xaml

1)啓動一個新的 「電網應用(XAML)」 在Windows應用商店,添加以下XAML:

複製此它:

<Page.BottomAppBar> 
    <AppBar> 
     <Button Content="X"/> 
    </AppBar> 
</Page.BottomAppBar> 

3)求GridView控件用X:名稱= 「itemGridView」,並設置其的SelectionMode = 「擴展」IsSwipeEnabled =「TR UE」

<GridView 
    x:Name="itemGridView" 
    AutomationProperties.AutomationId="ItemGridView" 
    AutomationProperties.Name="Grouped Items" 
    Grid.RowSpan="2" 
    Padding="116,137,40,46" 
    ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" 
    SelectionMode="Extended" 
    IsSwipeEnabled="true" 
    IsItemClickEnabled="True" 
    ItemClick="ItemView_ItemClick"> 

4)添加以下代碼的代碼隱藏文件:

public GroupedItemsPage() 
    { 
     this.InitializeComponent(); 

     itemGridView.SelectionChanged += ItemGridViewOnSelectionChanged; 
    } 

    private void ItemGridViewOnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (itemGridView.SelectedItems.Count > 0) 
     { 
      this.BottomAppBar.IsOpen = true; 
      this.BottomAppBar.IsSticky = true; 
     } 
     else 
     { 
      this.BottomAppBar.IsSticky = false; 
      this.BottomAppBar.IsOpen = false; 
     } 
    } 

5)運行它並觀看了第一選擇後的應用欄出現,但隨後你的第二個吸收了選擇第二個瓦片的手勢。

+0

是否可以爲您發佈GridView和應用欄XAML?無需發佈任何一個的子元素。我希望看到您在xaml中使用的選項。另外,您可以發佈設置應用欄的IsOpen和IsSticky字段的代碼隱藏嗎? –

+0

@chuex我加了一個例子。非常基本的使用Visual Studio的標準Grid App。 – Laith

回答

1

信不信解決方案是非常簡單的。你必須改變你如何設置BottomAppBar.IsOpenBottomAppBar.IsSticky順序:

private void ItemGridViewOnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (itemGridView.SelectedItems.Count > 0) 
    { 
     //this.BottomAppBar.IsOpen = true; 
     //this.BottomAppBar.IsSticky = true; 

     // must be done in this order for the app bar to work correctly 
     this.BottomAppBar.IsSticky = true; 
     this.BottomAppBar.IsOpen = true; 
    } 
    else 
    { 
     //this.BottomAppBar.IsSticky = false; 
     //this.BottomAppBar.IsOpen = false; 

     // I have a note in my code to use the following order, 
     // but ordering for this doesn't seem to matter. 
     this.BottomAppBar.IsOpen = false; 
     this.BottomAppBar.IsSticky = false; 
    } 
} 

我不知道爲什麼排序的問題,但它確實。

+0

令人難以置信!我好尷尬! – Laith

相關問題