UWP 中带有 3 个以上按钮的自定义内容对话框

Custom Content Dialog in UWP with 3+ buttons(UWP 中带有 3 个以上按钮的自定义内容对话框)
本文介绍了UWP 中带有 3 个以上按钮的自定义内容对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示一个内容对话框,它比传统的主要和次要结果更多.由于我无法覆盖 ContentDialogResult 枚举并向该属性添加选项,看来我唯一的选择可能是创建我自己的与 ContentDialog 类似的自定义控件.

附加上下文:通常,在计算机/应用程序操作期间可能会看到一个对话框,当操作是多余的,即复制文件到文件夹时,计算机通常会提供一个对话框,而不是两个选项,而是4.->对所有人都同意"、对所有人都没有"、是"、否".我似乎找不到任何千篇一律的方法来利用这种看似常见的做法.
我想像使用普通的内容对话框一样使用它:

var dialog = new MyCustomContentDialog();var 结果 = dialog.ShowAsync();

然后像普通的 ContentDialog 一样返回一个枚举,而是让它返回 4 个选项中的 1 个,而不仅仅是 2 个.

任何帮助或建议都会很棒.谢谢.

解决方案

我想显示一个内容对话框,它比传统的主要和次要结果更多.

I'd like to display a content dialog box that has more than the traditional Primary and Secondary results. Since I can't override the ContentDialogResult enum and add options to that property, it seems my only choice may be to create my own custom control that works similarly to a ContentDialog.

For additional context: Often, one might see a Dialog box show up during a computer/app operation, when the action is redundant, i.e. copying files to a folder, the computer generally offers a dialog box with not 2 options, but 4. -> "Yes to All", "No to All", "Yes", "No". I can't seem to find any cookie cutter ways to take advantage of this seemingly common practice.
I'd like to use it just the same as a normal Content Dialog like so:

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

and then return an enum just as the normal ContentDialog but instead have it return 1 of 4 options, not just 2.

Any help or recommendations would be great. Thanks.

解决方案

I'd like to display a content dialog box that has more than the traditional Primary and Secondary results.

The ContentDialog has 2 built-in buttons(the primary/secondary button) that let a user respond to the dialog. If you want more buttons to let the user to respond to the dialog, you should be able to achieve this by including these buttons in the content of the dialog.

Following is a simple sample shows how to create and use a custom dialog with 3 button:

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();
    }
}
}

Here is the code to show the custom dialog and use returned custom result:

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.";
    }
}

Here is the entire sample. Following is the output:

这篇关于UWP 中带有 3 个以上按钮的自定义内容对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)