【问题标题】:Custom Content Dialog in UWP with 3+ buttonsUWP 中带有 3 个以上按钮的自定义内容对话框
【发布时间】:2016-10-10 19:47:41
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# dialog windows-10-universal


    【解决方案1】:

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

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

    这里是entire sample。以下是输出:

    【讨论】:

      【解决方案2】:

      出于完整性考虑 - 默认情况下,ContentDialog 类实际上提供了三个按钮 - PrimarySecondaryClose。关闭是用户按下退出键时触发的,但如果您设置CloseButtonText,该按钮将显示为对话框页脚中的第三个按钮。

      【讨论】:

        猜你喜欢
        • 2012-06-15
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多