1

あらかじめお詫び申し上げますが、これは説明が難しいです。

選択可能なタイルでいっぱいのGridViewがあります。選択すると、IsOpenとIsStickyをtrueに設定すると、下部のAppBarが表示されます。これは正常に機能します。

ただし、最初の選択後にAppBarが表示されると、タッチアクティビティがキャプチャされ、AppBarの外側の領域にタッチすると解放されますが、そのタッチジェスチャは吸収されます。画面を2回タッチして、2回目の選択を実行します。

Windows 8のスタート画面では、複数のタイルを次々とシームレスに選択できます。表示される下部のバーは、後続のタッチジェスチャに干渉しません。しかし、私のアプリ内では、バーが最初のジェスチャをキャプチャし、2番目のタイルを2回選択することになります。アプリが反応しなくなったように感じます。

これを修正するにはどうすればよいですか?

これを複製するには:

1)Visual Studio 2012のWindowsストアで新しい「グリッドアプリ(XAML)」を起動します。

2)GroupedItemsPage.xamlで、次のXAMLを追加します。

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

3)x:Name = "itemGridView"でGridViewを見つけ、そのSelectionMode="Extended"IsSwipeEnabled="true"を設定します

<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)それを実行し、最初の選択の後にアプリバーが表示されるのを確認しますが、2番目のタイルを選択するための2番目のジェスチャは吸収されます。

4

1 に答える 1

1

信じられないかもしれませんが、解決策は実にシンプルです。設定方法の順序を変更する必要がありBottomAppBar.IsOpenますBottomAppBar.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;
    }
}

順序が重要な理由はわかりませんが、そうです。

于 2013-01-22T14:45:34.917 に答える