SwipeView

Browse sample. サンプルを参照する

.NET マルチプラットフォーム アプリ UI (.NET MAUI) SwipeView は、コンテンツの項目をラップし、スワイプ ジェスチャによって表示されるコンテキスト メニュー項目を提供するコンテナー コントロールです。

Screenshot of SwipeView swipe items in a CollectionView.

重要

SwipeView はタッチ インターフェイス用に設計されています。 Windows では、タッチ インターフェイスでのみスワイプでき、マウスなどのポインター デバイスでは機能しません。

SwipeView は次の特性を定義します。

  • SwipeItems 型の LeftItems は、コントロールが左側からスワイプされたときに呼び出せるスワイプ項目を表します。
  • SwipeItems 型の RightItems は、コントロールが右側からスワイプされたときに呼び出すことができるスワイプ項目を表します。
  • SwipeItems 型の TopItems は、コントロールが上から下にスワイプされたときに呼び出すことができるスワイプ項目を表します。
  • SwipeItems 型の BottomItems は、コントロールが下から上にスワイプされたときに呼び出すことができるスワイプ項目を表します。
  • double 型の Threshold は、スワイプ ジェスチャをトリガーしてスワイプ項目を完全に表示するデバイスに依存しない単位の数を表します。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

さらに、SwipeViewContentView クラスから Content プロパティを継承します。 Content プロパティは、SwipeView クラスのコンテンツ プロパティであるため、明示的に設定する必要はありません。

SwipeView クラスには、次の 3 つのイベントも定義されています。

  • SwipeStarted は、スワイプの開始時に発生します。 このイベントに付随する SwipeStartedEventArgs オブジェクトには、SwipeDirection 型の SwipeDirection プロパティがあります。
  • SwipeChanging は、スワイプの移動時に発生します。 このイベントに付随する SwipeChangingEventArgs オブジェクトには、SwipeDirection 型の SwipeDirection プロパティと double 型の Offset プロパティがあります。
  • SwipeEnded は、スワイプが終了したときに発生します。 このイベントに付随する SwipeEndedEventArgs オブジェクトには、SwipeDirection 型の SwipeDirection プロパティと bool 型の IsOpen プロパティがあります。

さらに、SwipeView には Open メソッドと Close メソッドも含まれています。これらはそれぞれ、スワイプ項目をプログラムで開いたり閉じたりするものです。

Note

iOS および Android 版の SwipeView には、SwipeView を開いたときに使用される遷移を制御するプラットフォーム固有の機能を備えています。 詳細については、「iOS の SwipeView スワイプ移行モード」「Android の SwipeView スワイプ遷移モード」を参照してください。

SwipeView を作成する

SwipeView では、SwipeView でラップするコンテンツと、スワイプ ジェスチャで表示されるスワイプ項目を定義する必要があります。 スワイプ項目は、SwipeView の 4 方向のコレクション (LeftItemsRightItemsTopItemsBottomItems) のいずれかに配置される 1 つまたは複数の SwipeItem オブジェクトです。

次の例は、XAML で SwipeView をインスタンス化する方法を示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems>
            <SwipeItem Text="Favorite"
                       IconImageSource="favorite.png"
                       BackgroundColor="LightGreen"
                       Invoked="OnFavoriteSwipeItemInvoked" />
            <SwipeItem Text="Delete"
                       IconImageSource="delete.png"
                       BackgroundColor="LightPink"
                       Invoked="OnDeleteSwipeItemInvoked" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
    <Grid HeightRequest="60"
          WidthRequest="300"
          BackgroundColor="LightGray">
        <Label Text="Swipe right"
               HorizontalOptions="Center"
               VerticalOptions="Center" />
    </Grid>
</SwipeView>

同等の C# コードを次に示します。

// SwipeItems
SwipeItem favoriteSwipeItem = new SwipeItem
{
    Text = "Favorite",
    IconImageSource = "favorite.png",
    BackgroundColor = Colors.LightGreen
};
favoriteSwipeItem.Invoked += OnFavoriteSwipeItemInvoked;

SwipeItem deleteSwipeItem = new SwipeItem
{
    Text = "Delete",
    IconImageSource = "delete.png",
    BackgroundColor = Colors.LightPink
};
deleteSwipeItem.Invoked += OnDeleteSwipeItemInvoked;

List<SwipeItem> swipeItems = new List<SwipeItem>() { favoriteSwipeItem, deleteSwipeItem };

// SwipeView content
Grid grid = new Grid
{
    HeightRequest = 60,
    WidthRequest = 300,
    BackgroundColor = Colors.LightGray
};
grid.Add(new Label
{
    Text = "Swipe right",
    HorizontalOptions = LayoutOptions.Center,
    VerticalOptions = LayoutOptions.Center
});

SwipeView swipeView = new SwipeView
{
    LeftItems = new SwipeItems(swipeItems),
    Content = grid
};

この例では、SwipeView コンテンツは、Label を含んだ Grid です。

Screenshot of SwipeView content.

スワイプ項目は、SwipeView コンテンツに対してアクションを実行するために使用され、コントロールが左側からスワイプされたときに表示されます。

Screenshot of SwipeView swipe items.

既定では、スワイプ項目は、ユーザーがタップしたときに実行されます。 ただし、この動作は変更可能です。 詳細については、「スワイプ モード」を参照してください。

スワイプ項目は実行されると非表示になり、SwipeView コンテンツが再表示されます。 ただし、この動作は変更可能です。 詳細については、「スワイプの動作」を参照してください。

Note

スワイプ コンテンツとスワイプ項目は、インラインで配置することも、リソースとして定義することもできます。

項目をスワイプする

LeftItemsRightItemsTopItemsBottomItems の各コレクションはすべて SwipeItems 型です。 SwipeItems クラスでは、次のプロパティが定義されます。

  • SwipeMode 型の Mode は、スワイプ操作の効果を示します。 スワイプ モードの詳細については、「スワイプ モード」を参照してください
  • SwipeBehaviorOnInvoked 型の SwipeBehaviorOnInvoked は、スワイプ項目が呼び出された後の SwipeView の動作を示します。 スワイプの動作の詳細については、「スワイプの動作」を参照してください。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

各スワイプ項目は、4 方向の SwipeItems コレクションのいずれかに配置される SwipeItem オブジェクトとして定義されます。 SwipeItem クラスは MenuItem クラスから派生し、次のメンバーを追加します。

  • BackgroundColor プロパティ (Color 型) - スワイプ項目の背景色を定義します。 このプロパティは、バインド可能なプロパティによってサポートされています。
  • Invoked イベントは、スワイプ項目の実行時に発生します。

重要

MenuItem クラスは、CommandCommandParameterIconImageSourceText など、いくつかのプロパティを定義します。 これらのプロパティを SwipeItem オブジェクトに設定して、オブジェクトの外観を定義したり、スワイプ項目が呼び出されたときに実行される ICommand を定義したりできます。 詳細については、「メニュー項目の表示」をご覧ください。

次の例は、SwipeViewLeftItems コレクションに含まれる 2 つの SwipeItem オブジェクトを示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems>
            <SwipeItem Text="Favorite"
                       IconImageSource="favorite.png"
                       BackgroundColor="LightGreen"
                       Invoked="OnFavoriteSwipeItemInvoked" />
            <SwipeItem Text="Delete"
                       IconImageSource="delete.png"
                       BackgroundColor="LightPink"
                       Invoked="OnDeleteSwipeItemInvoked" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
</SwipeView>

SwipeItem の外観は、Text プロパティ、IconImageSource プロパティ、BackgroundColor プロパティの組み合わせで定義されます。

Screenshot of SwipeView swipe items.

SwipeItem がタップされると、その Invoked イベントが発生し、登録されたイベント ハンドラーで処理されます。 さらに、MenuItem.Clicked イベントも発生します。 または、SwipeItem が呼び出されたときに実行される ICommand 実装に Command プロパティを設定することもできます。

Note

Text プロパティまたは IconImageSource プロパティのみを使用して SwipeItem の外観が定義されている場合、コンテンツは常に中央揃えになります。

スワイプ項目を SwipeItem オブジェクトとして定義するだけでなく、カスタムスワイプ項目ビューを定義することもできます。 詳細については、「カスタムスワイプ項目」をご覧ください。

スワイプ方向

SwipeView では 4 種類のスワイプ方向がサポートされており、SwipeItem オブジェクトの追加先となる方向 SwipeItems コレクションでスワイプ方向が定義されます。 各スワイプ方向は、独自のスワイプ項目を保持できます。 たとえば、次の例は、スワイプ項目がスワイプ方向に依存する SwipeView を示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems>
            <SwipeItem Text="Delete"
                       IconImageSource="delete.png"
                       BackgroundColor="LightPink"
                       Command="{Binding DeleteCommand}" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <SwipeView.RightItems>
        <SwipeItems>
            <SwipeItem Text="Favorite"
                       IconImageSource="favorite.png"
                       BackgroundColor="LightGreen"
                       Command="{Binding FavoriteCommand}" />
            <SwipeItem Text="Share"
                       IconImageSource="share.png"
                       BackgroundColor="LightYellow"
                       Command="{Binding ShareCommand}" />
        </SwipeItems>
    </SwipeView.RightItems>
    <!-- Content -->
</SwipeView>

この例では、SwipeView コンテンツを右または左にスワイプできます。 右にスワイプすると、スワイプ項目の [削除] が表示されるのに対して、左にスワイプすると、スワイプ項目の [お気に入り][共有] が表示されます。

警告

SwipeView に一度に設定できる方向 SwipeItems コレクションのインスタンスは 1 つだけです。 したがって、SwipeViewLeftItems を 2 つ定義することはできません。

SwipeStartedSwipeChangingSwipeEnded の各イベントは、イベント引数の SwipeDirection プロパティを通じてスワイプ方向を報告します。 このプロパティは SwipeDirection 型です。これは、次の 4 つのメンバーで構成される列挙型です。

  • Right は、右向きのスワイプが発生したことを示します。
  • Left は、左スワイプが発生したことを示します。
  • Up は、上向きのスワイプが発生したことを示します。
  • Down は、下方向にスワイプが発生したことを示します。

スワイプのしきい値

SwipeView には、スワイプ ジェスチャをトリガーしてスワイプ項目を完全に表示する、デバイスに依存しない単位の数値を表す Threshold プロパティ (double 型) が含まれています。

次の例は、Threshold プロパティを設定する SwipeView を示しています。

<SwipeView Threshold="200">
    <SwipeView.LeftItems>
        <SwipeItems>
            <SwipeItem Text="Favorite"
                       IconImageSource="favorite.png"
                       BackgroundColor="LightGreen" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
</SwipeView>

この例では、SwipeItem を完全に表示するには、デバイスに依存しない単位の 200 単位分だけ SwipeView をスワイプする必要があります。

スワイプ モード

SwipeItems クラスには、スワイプ操作の効果を示す Mode プロパティがあります。 このプロパティは、次の SwipeMode 列挙型メンバーのいずれかに設定する必要があります。

  • Reveal は、スワイプによってスワイプ項目が表示されることを示します。 これは、SwipeItems.Mode プロパティの既定値です。
  • Execute は、スワイプでスワイプ項目が実行されることを示します。

表示モードでは、ユーザーが SwipeView をスワイプすると、1 つ以上のスワイプ項目で構成されるメニューが開きます。スワイプ項目を実行するには、スワイプ項目を明示的にタップする必要があります。 スワイプ項目が実行された後は、スワイプ項目が閉じられ、SwipeView コンテンツが再表示されます。 実行モードでは、ユーザーが SwipeView をスワイプすると、1 つ以上のスワイプ項目で構成されるメニューが開いたあと、それらのスワイプ項目が自動的に実行されます。 実行後は、スワイプ項目が閉じられ、SwipeView コンテンツが再表示されます。

次の例は、実行モードを使用するように構成された SwipeView を示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems Mode="Execute">
            <SwipeItem Text="Delete"
                       IconImageSource="delete.png"
                       BackgroundColor="LightPink"
                       Command="{Binding DeleteCommand}" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
</SwipeView>

この例では、SwipeView コンテンツを右方向にスワイプすると、スワイプ項目が表示され、すぐに実行されます。 実行後、SwipeView コンテンツが再表示されます。

スワイプ動作

SwipeItems クラスには、スワイプ項目が呼び出された後の SwipeView の動作を示す SwipeBehaviorOnInvoked プロパティがあります。 このプロパティは、次の SwipeBehaviorOnInvoked 列挙要素のいずれかに設定する必要があります。

  • Auto は、表示モードでは、スワイプ項目が呼び出された後に SwipeView が閉じ、実行モードでは、スワイプ項目が呼び出された後も SwipeView が開いたままになることを示します。 これは、SwipeItems.SwipeBehaviorOnInvoked プロパティの既定値です。
  • Close は、スワイプ項目が呼び出された後に SwipeView が閉じることを示します。
  • RemainOpenは、スワイプ項目が呼び出された後も SwipeView が開いたままになることを示します。

次の例は、スワイプ項目が呼び出された後も開いたままになるように構成された SwipeView を示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems SwipeBehaviorOnInvoked="RemainOpen">
            <SwipeItem Text="Favorite"
                       IconImageSource="favorite.png"
                       BackgroundColor="LightGreen"
                       Invoked="OnFavoriteSwipeItemInvoked" />
            <SwipeItem Text="Delete"
                       IconImageSource="delete.png"
                       BackgroundColor="LightPink"
                       Invoked="OnDeleteSwipeItemInvoked" />
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
</SwipeView>

カスタム スワイプ項目

カスタム スワイプ項目は SwipeItemView 型で定義できます。 SwipeItemView クラスは ContentView クラスから派生し、次のプロパティを追加します。

  • ICommand 型の Command は、スワイプ項目をタップすると実行されます。
  • CommandParameter: object 型、Command に渡されるパラメーター。

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

また、SwipeItemView クラスには、Command の実行後に項目をタップしたときに発生する Invoked イベントも定義されています。

次の例は、SwipeViewLeftItems コレクションに含まれる SwipeItemView オブジェクトを示しています。

<SwipeView>
    <SwipeView.LeftItems>
        <SwipeItems>
            <SwipeItemView Command="{Binding CheckAnswerCommand}"
                           CommandParameter="{Binding Source={x:Reference resultEntry}, Path=Text}">
                <StackLayout Margin="10"
                             WidthRequest="300">
                    <Entry x:Name="resultEntry"
                           Placeholder="Enter answer"
                           HorizontalOptions="CenterAndExpand" />
                    <Label Text="Check"
                           FontAttributes="Bold"
                           HorizontalOptions="Center" />
                </StackLayout>
            </SwipeItemView>
        </SwipeItems>
    </SwipeView.LeftItems>
    <!-- Content -->
</SwipeView>

この例では、SwipeItemViewEntryLabel を含んだ StackLayout で構成されます。 ユーザーは、Entry に入力した後で SwipeViewItem の残りの部分をタップして、SwipeItemView.Command プロパティで定義された ICommand を実行できます。

プログラムによって SwipeView を開く/閉じる

SwipeView には Open メソッドと Close メソッドが含まれています。これらはそれぞれ、スワイプ項目をプログラムで開いたり閉じたりするものです。 既定では、これらのメソッドは、SwipeView が開くときや閉じるときに、それをアニメーション化します。

Open メソッドには、SwipeView がどの方向から開くかを指定する OpenSwipeItem 引数が必要です。 OpenSwipeItem 列挙型には、次の 4 つの要素があります。

  • LeftItems は、SwipeView が左から開いて、LeftItems コレクション内のスワイプ項目が表示されることを示します。
  • TopItems は、SwipeView が上から開いて、TopItems コレクション内のスワイプ項目が表示されることを示します。
  • RightItems は、SwipeView が右から開いて、RightItems コレクション内のスワイプ項目が表示されることを示します。
  • BottomItems は、SwipeView が下から開いて、BottomItems コレクション内のスワイプ項目が表示されることを示します。

さらに、Open メソッドは、SwipeView が開くときにアニメーション化するかどうかを定義するオプションの bool 引数も受け取ります。

swipeView という名前の SwipeView を仮定して、次の例は、SwipeView を開いて LeftItems コレクション内のスワイプ項目を表示する方法を示しています。

swipeView.Open(OpenSwipeItem.LeftItems);

swipeView はその後、Close メソッドを使用して閉じることができます。

swipeView.Close();

Note

Close メソッドは、SwipeView が閉じるときにアニメーション化するかどうかを定義する、オプションの bool 引数も受け取ります。

SwipeView を無効にする

アプリは、コンテンツ項目をスワイプする操作が有効でない状態になる場合があります。 このような場合は、その IsEnabled プロパティを false に設定することで、SwipeView を無効にすることができます。 これにより、ユーザーはコンテンツをスワイプしてスワイプ項目を表示することができなくなります。

また、SwipeItem または SwipeItemViewCommand プロパティを定義する際に、ICommandCanExecute デリゲートを指定して、スワイプ項目を有効または無効にすることができます。