4

「はい」と「いいえ」の代わりにWPFメッセージボックスのボタンをカスタマイズする方法はありますか。「Enter」または「Exit」などが必要です。私が検索したすべてのWebは、ウィンドウを作成することによってそれを行うのは難しいと言っていましたが、それらを除くすべては3〜4年前の回答でした。今、それを行う簡単な方法はありますか?

4

2 に答える 2

4

WPF ToolkitExtendeMessageBox をカスタマイズできます。または、ACBが提案したカスタムのWPFCustomMessageBoxを使用することもできます 。

于 2013-02-07T07:46:36.913 に答える
1

私はこれが遅い答えであることを知っていますが、それは役に立つかもしれません。

私は同じものが必要でした、そして私はこの方法を見つけました、そして私はそれを共有したかったです。

これにはウィンドウを使用します。

私のウィンドウには、キャプション用のラベルとメッセージ用のラベルがあります。

そして3つのボタン(または必要に応じてそれ以上)。

これが私のウィンドウです:

<Window x:Class="CapronCAD.LIB.Controls.CapronMessageBox"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:CapronCAD.LIB.Controls"
    mc:Ignorable="d" Height="450" Width="800" WindowStyle="None" WindowStartupLocation="CenterOwner" WindowState="Minimized" ResizeMode="NoResize" ShowInTaskbar="False" AllowsTransparency="True" Background="Transparent">
<Grid x:Name="grdMessageBox" Background="#33000B4B">
    <Border BorderBrush="Black" BorderThickness="0" HorizontalAlignment="Center" Height="250" Margin="0" VerticalAlignment="Center" Width="600" Background="White" CornerRadius="5">
        <Grid>
            <Button x:Name="btnMessageBoxYes" FontWeight="SemiBold" Content="Oui" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,30,30" Width="60" Click="btnMessageBoxYes_Click"/>
            <Button x:Name="btnMessageBoxNo" FontWeight="SemiBold" Content="Non" HorizontalAlignment="Right" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,103,30" Width="60" Background="#FFCFC9FF" Foreground="#FF6F5DF5" Click="btnMessageBoxNo_Click"/>
            <TextBlock x:Name="tbMessageBoxCaption" FontWeight="SemiBold" Margin="30,43,10,0" TextWrapping="Wrap" Text="-" VerticalAlignment="Top" FontFamily="Poppins" FontSize="14"/>
            <TextBlock x:Name="tbMessageBoxMessage" Margin="30,80,10,0" TextWrapping="Wrap" Text="-" VerticalAlignment="Top" FontFamily="Poppins"/>
            <Image x:Name="imgMessageBoxCancel" HorizontalAlignment="Right" Height="18" Margin="0,19,30,0" VerticalAlignment="Top" Width="18" Source="/CapronCAD.LIB;component/Resources/CloseBlack.png" MouseLeftButtonUp="imgMessageBoxCancel_MouseLeftButtonUp"/>
            <Button x:Name="btnMessageBoxClose" FontWeight="SemiBold" Content="Fermer" HorizontalAlignment="Center" VerticalAlignment="Bottom" Style="{DynamicResource ResourceKey=Capron_Violet_ButtonStyle}" Margin="0,0,0,30" Visibility="Collapsed" Click="btnMessageBoxClose_Click"/>
        </Grid>
    </Border>
</Grid>

ウィンドウをダイアログとして表示する簡単な方法は次のとおりです。

  internal static System.Windows.Forms.DialogResult ShowCustomMessageBox(string message, string caption = "Default caption", bool dialog = true)
    {
        Controls.CapronMessageBox mb = new Controls.CapronMessageBox(caption, message, dialog);
        mb.Topmost = true;
        mb.WindowState = WindowState.Maximized;
        mb.ShowDialog();

        
        if (mb.DialogResult == null)
            return System.Windows.Forms.DialogResult.None;
        else if (mb.DialogResult == true)
            return System.Windows.Forms.DialogResult.Yes;
        else
            return System.Windows.Forms.DialogResult.No;
    }

ウィンドウの背後にあるコードは次のとおりです。

 public partial class CapronMessageBox: Window
{
    public CapronMessageBox(string caption, string message, bool dialog)
    {
        InitializeComponent();
        tbMessageBoxCaption.Text = caption;
        tbMessageBoxMessage.Text = message;
        if (!dialog)
        {
            btnMessageBoxClose.Visibility = Visibility.Visible;
            btnMessageBoxNo.Visibility = Visibility.Collapsed;
            btnMessageBoxYes.Visibility = Visibility.Collapsed;
        }
    }

    private void btnMessageBoxNo_Click(object sender, RoutedEventArgs e)
    {
        DialogResult = false;
    }

    private void imgMessageBoxCancel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        this.Close();
    }

    private void btnMessageBoxYes_Click(object sender, RoutedEventArgs e)
    {
        DialogResult = true;
    }

    private void btnMessageBoxClose_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
}    

そして、ここで私はそれをどのように呼んでいますか:

 if (UserMethods.ShowCustomMessageBox("Do you want to save changes?", "Are you sure?", false) == DialogResult.Yes)
                {
                    btnSave_Click(btnSave, null);
                }

そして、これがどのように見えるかです: ここに画像の説明を入力してください

于 2021-09-06T13:58:13.370 に答える