web-dev-qa-db-ja.com

3つ以上のボタンを備えたUWPのカスタムコンテンツダイアログ

従来のプライマリおよびセカンダリの結果よりも多くのコンテンツダイアログボックスを表示したいと思います。 ContentDialogResult列挙型をオーバーライドしてそのプロパティにオプションを追加することはできないため、ContentDialogと同様に機能する独自のカスタムコントロールを作成することが唯一の選択肢のようです。

追加のコンテキスト:多くの場合、コンピューター/アプリの操作中にダイアログボックスが表示されることがあります。アクションが冗長な場合、つまりファイルをフォルダーにコピーする場合、コンピューターは通常、2つのオプションではなく4つのオプションを備えたダイアログボックスを提供します。 >「すべてはい」、「すべていいえ」、「はい」、「いいえ」。この一見一般的な方法を利用するためのクッキーカッターの方法を見つけることができないようです。
次のように、通常のコンテンツダイアログと同じように使用したいと思います。

var dialog = new MyCustomContentDialog();
var result = dialog.ShowAsync();

次に、通常のContentDialogと同じように列挙型を返しますが、代わりに2つだけでなく4つのオプションのうちの1つを返します。

どんな助けや推薦も素晴らしいでしょう。ありがとう。

6
TekGiant

従来のプライマリおよびセカンダリの結果よりも多くのコンテンツダイアログボックスを表示したいと思います。

ContentDialog には、ユーザーがダイアログに応答できるようにする2つの組み込みボタン(プライマリ/セカンダリボタン)があります。ユーザーがダイアログに応答できるようにするボタンを増やしたい場合は、ダイアログのコンテンツにこれらのボタンを含めることでこれを実現できるはずです。

以下は、3ボタンのカスタムダイアログを作成して使用する方法を示す簡単なサンプルです。

MyCustomContentDialog.xaml

<ContentDialog
x:Class="ContentDialogDemo01.MyCustomContentDialog"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:local="using:ContentDialogDemo01"
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="dialog"
Title="Delete">

<!-- Content body -->
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="0,20">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="200" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.ColumnSpan="3" Text="Delete file A?" Margin="5" />
    <Button Grid.Row="1" Content="Yes" x:Name="btn1" Click="btn1_Click" Margin="5,0" Width="100" />
    <Button Grid.Row="1" Grid.Column="1" Content="No" x:Name="btn2" Click="btn2_Click" Margin="5,0" Width="100" />
    <Button Grid.Row="1" Grid.Column="2" Content="Cancle" x:Name="btn3" Click="btn3_Click" Margin="5,0" Width="100" />
</Grid>
</ContentDialog>

MyCustomContentDialog.xaml.cs

namespace ContentDialogDemo01
{
// Define your own ContentDialogResult enum
public enum MyResult
{
    Yes,
    No,
    Cancle,
    Nothing
}

public sealed partial class MyCustomContentDialog : ContentDialog
{
    public MyResult Result { get; set; }

    public MyCustomContentDialog()
    {
        this.InitializeComponent();
        this.Result = MyResult.Nothing;
    }

    // Handle the button clicks from dialog
    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        this.Result = MyResult.Yes;
        // Close the dialog
        dialog.Hide();
    }

    private void btn2_Click(object sender, RoutedEventArgs e)
    {
        this.Result = MyResult.No;
        // Close the dialog
        dialog.Hide();
    }

    private void btn3_Click(object sender, RoutedEventArgs e)
    {
        this.Result = MyResult.Cancle;
        // Close the dialog
        dialog.Hide();
    }
}
}

カスタムダイアログを表示し、返されたカスタム結果を使用するコードは次のとおりです。

private async void ShowDialog_Click(object sender, RoutedEventArgs e)
{
    // Show the custom dialog
    MyCustomContentDialog dialog = new MyCustomContentDialog();
    await dialog.ShowAsync();

    // Use the returned custom result
    if (dialog.Result == MyResult.Yes)
    {
        DialogResult.Text = "Dialog result Yes.";
    }
    else if (dialog.Result == MyResult.Cancle)
    {
        DialogResult.Text = "Dialog result Canceled.";
    }
    else if (dialog.Result == MyResult.No)
    {
        DialogResult.Text = "Dialog result NO.";
    }
}

これが サンプル全体 です。出力は次のとおりです。 enter image description here

25
Jerry Li