Back to list
christian289

creating-wpf-dialogs

by christian289

ClaudeCode와 함께하는 .NET 개발 튜토리얼

1🍴 0📅 Jan 25, 2026

SKILL.md


name: creating-wpf-dialogs description: Creates WPF dialog windows including modal dialogs, MessageBox, and common dialogs. Use when implementing confirmation prompts, settings windows, or file/folder pickers.

WPF Dialog Patterns

Creating and managing dialog windows for user interaction.

Advanced Patterns: See ADVANCED.md for MVVM dialog service, modeless dialogs, and input dialogs.

1. Dialog Types Overview

Dialog Types
├── Modal Dialogs (ShowDialog)
│   ├── Custom Window dialogs
│   └── MessageBox
├── Modeless Dialogs (Show)
│   └── Tool windows, floating panels
└── Common Dialogs
    ├── OpenFileDialog
    ├── SaveFileDialog
    └── FolderBrowserDialog

2. MessageBox

2.1 Basic Usage

// Simple message
MessageBox.Show("Operation completed successfully.");

// With title
MessageBox.Show("File saved.", "Success");

// With buttons
var result = MessageBox.Show(
    "Do you want to save changes?",
    "Confirm",
    MessageBoxButton.YesNoCancel);

// With icon
MessageBox.Show(
    "An error occurred.",
    "Error",
    MessageBoxButton.OK,
    MessageBoxImage.Error);

2.2 MessageBox Options

Buttons:

ValueButtons
OKOK
OKCancelOK, Cancel
YesNoYes, No
YesNoCancelYes, No, Cancel

Icons:

ValueIcon
NoneNo icon
InformationInfo circle
WarningWarning triangle
ErrorRed X

2.3 Processing Results

var result = MessageBox.Show(
    "Are you sure you want to delete this item?",
    "Confirm Delete",
    MessageBoxButton.YesNo,
    MessageBoxImage.Warning,
    MessageBoxResult.No);  // Default button

switch (result)
{
    case MessageBoxResult.Yes:
        DeleteItem();
        break;
    case MessageBoxResult.No:
        // Cancelled
        break;
}

3. Custom Modal Dialog

3.1 Dialog Window XAML

<Window x:Class="MyApp.Dialogs.SettingsDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Settings"
        Width="400" Height="300"
        WindowStartupLocation="CenterOwner"
        ResizeMode="NoResize"
        ShowInTaskbar="False">
    <Grid Margin="20">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <!-- Content -->
        <StackPanel Grid.Row="0">
            <Label Content="User Name:"/>
            <TextBox x:Name="UserNameTextBox" Margin="0,5,0,15"/>
            <CheckBox x:Name="EnableNotificationsCheckBox"
                      Content="Enable notifications"/>
        </StackPanel>

        <!-- Dialog buttons -->
        <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Content="OK" Width="80" Margin="0,0,10,0"
                    Click="OkButton_Click" IsDefault="True"/>
            <Button Content="Cancel" Width="80"
                    Click="CancelButton_Click" IsCancel="True"/>
        </StackPanel>
    </Grid>
</Window>

3.2 Dialog Code-Behind

namespace MyApp.Dialogs;

using System.Windows;

public partial class SettingsDialog : Window
{
    public string UserName { get; private set; } = string.Empty;
    public bool EnableNotifications { get; private set; }

    public SettingsDialog()
    {
        InitializeComponent();
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {
        // Validate input
        if (string.IsNullOrWhiteSpace(UserNameTextBox.Text))
        {
            MessageBox.Show("Please enter a user name.", "Validation Error",
                MessageBoxButton.OK, MessageBoxImage.Warning);
            UserNameTextBox.Focus();
            return;
        }

        // Set results
        UserName = UserNameTextBox.Text;
        EnableNotifications = EnableNotificationsCheckBox.IsChecked ?? false;

        // Close with success
        DialogResult = true;
    }

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

3.3 Using the Dialog

private void OpenSettings_Click(object sender, RoutedEventArgs e)
{
    var dialog = new SettingsDialog
    {
        Owner = this  // Set owner for centering
    };

    if (dialog.ShowDialog() == true)
    {
        // User clicked OK
        _currentUserName = dialog.UserName;
        _enableNotifications = dialog.EnableNotifications;
        ApplySettings();
    }
}

4. Common Dialogs

4.1 OpenFileDialog

using Microsoft.Win32;

private void OpenFile_Click(object sender, RoutedEventArgs e)
{
    var dialog = new OpenFileDialog
    {
        Title = "Open File",
        Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
        FilterIndex = 1,
        InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
        Multiselect = false,
        CheckFileExists = true
    };

    if (dialog.ShowDialog() == true)
    {
        var filePath = dialog.FileName;
        LoadFile(filePath);
    }
}

// Multiple file selection
private void OpenMultipleFiles_Click(object sender, RoutedEventArgs e)
{
    var dialog = new OpenFileDialog
    {
        Multiselect = true,
        Filter = "Image files (*.png;*.jpg)|*.png;*.jpg"
    };

    if (dialog.ShowDialog() == true)
    {
        foreach (var file in dialog.FileNames)
        {
            ProcessFile(file);
        }
    }
}

4.2 SaveFileDialog

using Microsoft.Win32;

private void SaveFile_Click(object sender, RoutedEventArgs e)
{
    var dialog = new SaveFileDialog
    {
        Title = "Save File",
        Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
        FileName = "document.txt",
        DefaultExt = ".txt",
        AddExtension = true,
        OverwritePrompt = true
    };

    if (dialog.ShowDialog() == true)
    {
        var filePath = dialog.FileName;
        SaveFile(filePath);
    }
}

4.3 .NET 8+ Folder Picker

// .NET 8+ includes OpenFolderDialog
private void SelectFolder_Click(object sender, RoutedEventArgs e)
{
    var dialog = new OpenFolderDialog
    {
        Title = "Select Output Folder",
        InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
    };

    if (dialog.ShowDialog() == true)
    {
        var folderPath = dialog.FolderName;
        ProcessFolder(folderPath);
    }
}

5. References

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon