2

AppBarと一緒にリストビューの複数選択シナリオを実装する最も簡単な方法は何ですか?複数のアイテムを選択した場合(たとえば、マウスの右クリックで)、Windows8のスタート画面とまったく同じように動作するようにします。

最初に選択したリストビューアイテムと一緒にアプリバーを表示したい、2番目、3番目などで開いたままにしておきたい、アプリバーボタンアクション(実行されたコンテキストアクション)またはによって閉じたい他のシステム全体のアプリバーを閉じるアクション(たとえば、別の場所を右クリックすると、コンテキストアクションがキャンセルされます)。

私の現在の実装は複雑すぎます。私は何かを見逃したに違いないと思います-そのような基本的で一般的なシナリオは、標準化された方法で実装できる必要があります。

以下に用意されている足場コード。このコードのみを使用した場合、2番目のリストビューアイテムを右クリックする前にアプリバーが非表示になり、リストビューをもう一度右クリックする必要があります(受け入れられません)。IsStickyと組み合わせると、2番目のリストビューアイテムをまったく選択できなくなります。

<Page
    x:Class="ListViewAndAppBar.ExamplePage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ListViewAndAppBar"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    DataContext="{Binding ExamplePageViewModel, Source={StaticResource Locator}}">

    <Grid Background="Gray">
        <ListView
            x:Name="ListView"
            ItemsSource="{Binding Persons}"
            SelectionMode="Multiple"
            SelectionChanged="ListView_SelectionChanged">
        </ListView>
    </Grid>

    <Page.BottomAppBar>
        <AppBar x:Name="BottomAppBar" Padding="10,0,10,0">
            <Button x:Name="BottomAppBarBack" Tag="Back" Style="{StaticResource BackAppBarButtonStyle}" HorizontalAlignment="Left" />
        </AppBar>
    </Page.BottomAppBar>
</Page>

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    this.BottomAppBar.IsOpen = true;
    //this.BottomAppBar.IsSticky = true;
}
4

1 に答える 1

9

私自身の質問に答えます。質問を投稿してすぐに解決策を見つけました。誰かが同じ初心者の間違いをした場合に備えて、ここに残しておきます。

解決策をこれ以上単純にすることはできません。IsStickyはIsOpenの前に呼び出す必要があります。この切り替え後、すべてが期待どおりに機能します。

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

    // Or the following if you wish...
    // this.BottomAppBar.IsOpen = this.BottomAppBar.IsSticky = this.ListView.SelectedItems.Count > 0;
}
于 2012-05-13T06:12:18.223 に答える