<Window x:Class="CustomDialogSample.SettingsDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Settings" Height="200" Width="400" ResizeMode="CanResizeWithGrip" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" FocusManager.FocusedElement="{Binding ElementName=myStringTextBox}" ShowInTaskbar="False"> <StackPanel> <Label Target="{Binding ElementName=myStringTextBox}">Report _Folder</Label> <TextBox x:Name="myStringTextBox" Text="{Binding MyString}" /> <Button x:Name="folderBrowseButton">...</Button> <Button HorizontalAlignment="Left" Name="reportColorButton"> <StackPanel> <Rectangle Width="15" Height="15" SnapsToDevicePixels="True" Fill="{StaticResource reportBrush}" /> <AccessText Text="Report _Color..." Margin="10,0,0,0" /> </StackPanel> </Button> <Button x:Name="okButton" IsDefault="True">OK</Button> <Button x:Name="cancelButton" IsCancel="True">Cancel</Button> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.ComponentModel; namespace CustomDialogSample { class DialogData : INotifyPropertyChanged { Color reportColor; public Color MyColor { get { return reportColor; } set { reportColor = value; Notify("MyColor"); } } string mystring; public string MyString { get { return mystring; } set { mystring = value; Notify("MyString"); } } public event PropertyChangedEventHandler PropertyChanged; void Notify(string prop) { if( PropertyChanged != null ) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } } } public partial class SettingsDialog : System.Windows.Window { DialogData data = new DialogData(); public Color MyColor { get { return data.MyColor; } set { data.MyColor = value; } } public string MyString { get { return data.MyString; } set { data.MyString = value; } } public SettingsDialog() { InitializeComponent(); DataContext = data; reportColorButton.Click += reportColorButton_Click; folderBrowseButton.Click += folderBrowseButton_Click; okButton.Click += new RoutedEventHandler(okButton_Click); } void okButton_Click(object sender, RoutedEventArgs e) { DialogResult = true; } void reportColorButton_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.ColorDialog dlg = new System.Windows.Forms.ColorDialog(); Color color = MyColor; dlg.Color = System.Drawing.Color.FromArgb(color.A, color.R, color.G, color.B); if( dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK ) { MyColor = Color.FromArgb(dlg.Color.A, dlg.Color.R, dlg.Color.G, dlg.Color.B); } } void folderBrowseButton_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog(); dlg.SelectedPath = MyString; if( dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK ) { MyString = dlg.SelectedPath; } } } }