Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

WpfMessageBox is a WPF message box implementation, aimed to be visually balanced between the default WPF style and the native .NET MessageBox. It offers the following features:

* Returns the standard .NET [MessageBoxResult](https://docs.microsoft.com/en-us/dotnet/api/system.windows.messageboxresult)s.
* Uses the standard MessageBox [icons](https://docs.microsoft.com/en-us/windows/desktop/uxguide/vis-std-icons).
* Returns an equivalent of the standard .NET [MessageBoxResult](https://docs.microsoft.com/en-us/dotnet/api/system.windows.messageboxresult)s.
* Uses an equivalent of the standard MessageBox [icons](https://docs.microsoft.com/en-us/windows/desktop/uxguide/vis-std-icons).
* Ability to define custom buttons text.
* Optional header text.
* Optional TextBox.
Expand All @@ -19,23 +19,24 @@ WpfMessageBox is a WPF message box implementation, aimed to be visually balanced
## Usage

1. Install through [Nuget](https://www.nuget.org/packages/WpfMessageBox)
2. WpfMessageBox uses static method like the standard .NET MessageBox:
2. WpfMessageBox uses static methods like the standard .NET MessageBox:

```
```csharp
using WpfMessageBoxLibrary;

MessageBoxResult result = WpfMessageBox.Show("Some text", "Some title", MessageBoxButton.OK, MessageBoxImage.Exclamation);
WpfMessageBoxResult result = WpfMessageBox.Show("Some text", "Some title", WpfMessageBoxButton.OK, WpfMessageBoxImage.Exclamation);
```

3. In order to use the extra features offered by WpfMessageBox, you need to initialize a new `WpfMessageBoxProperties` which will hold the desired properties, then use the relevant static method:

```
```csharp
using WpfMessageBoxLibrary;

var msgProperties = new WpfMessageBoxProperties() {
Button = MessageBoxButton.OKCancel,
Button = WpfMessageBoxButton.OKCancel,
ButtonOkText = "Set name",
CheckBoxText = "Don't ask again",
Image = MessageBoxImage.Exclamation,
Image = WpfMessageBoxImage.Exclamation,
Header = "No name defined",
IsCheckBoxChecked = true,
IsCheckBoxVisible = true,
Expand All @@ -44,12 +45,12 @@ WpfMessageBox is a WPF message box implementation, aimed to be visually balanced
Title = "A nice example",
};

MessageBoxResult result = WpfMessageBox.Show(this, ref msgProperties);
WpfMessageBoxResult result = WpfMessageBox.Show(this, ref msgProperties);
```

4. The `WpfMessageBoxProperties` object allows you to retrieve the `TextBox` and `CheckBox` values after the user closed the message box:

```
```csharp
bool checkBoxChecked = msgProperties.IsCheckBoxChecked;
string textBoxContent = msgProperties.TextBoxText;
```
Expand All @@ -63,3 +64,8 @@ See the [changelog](CHANGELOG.md).
## License

WpfMessageBox is licensed under the MIT license - see the [LICENSE](LICENSE) file for details.

## Credits

Some icons by [Yusuke Kamiyamane](http://p.yusukekamiyamane.com) licensed under a [Creative Commons Attribution 3.0 License](https://creativecommons.org/licenses/by/3.0).

Binary file modified docs/images/Screenshot-custom-buttons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/Screenshot-full.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 24 additions & 19 deletions src/Demo/WindowMain.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ private void ButtonWpfMsgBoxAllFeatures_Click(object sender, RoutedEventArgs e)
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.YesNoCancel,
Button = WpfMessageBoxButton.YesNoCancel,
ButtonCancelText = "Cancel, cancel!",
ButtonNoText = "Please no",
ButtonYesText = "Yes _Sir",
CheckBoxText = "I've pre-checked this for you",
Image = MessageBoxImage.Error,
Image = WpfMessageBoxImage.Error,
Header = "Here we have an example of a very very very very very very very very very very very very very very very very very long instruction text.",
IsCheckBoxChecked = true,
IsCheckBoxVisible = true,
Expand All @@ -69,11 +69,11 @@ private void ButtonWpfMsgBoxCustomButtons_Click(object sender, RoutedEventArgs e
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.YesNoCancel,
Button = WpfMessageBoxButton.YesNoCancel,
ButtonCancelText = "Cancel, cancel!",
ButtonNoText = "Please no",
ButtonYesText = "Yes _Sir",
Image = MessageBoxImage.Information,
Image = WpfMessageBoxImage.Information,
Text = "Some text",
Title = "Some title",
};
Expand All @@ -86,9 +86,9 @@ private void ButtonWpfMsgBoxLongInstruction_Click(object sender, RoutedEventArgs
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OK,
Button = WpfMessageBoxButton.OK,
Header = "Here we have an example of a very very very very very very very very very very very very very very very very very long instruction text.",
Image = MessageBoxImage.Information,
Image = WpfMessageBoxImage.Information,
Text = "Some text",
Title = "Some title",
};
Expand All @@ -99,18 +99,18 @@ private void ButtonWpfMsgBoxLongInstruction_Click(object sender, RoutedEventArgs

private void ButtonWpfMsgBoxLongText_Click(object sender, RoutedEventArgs e)
{
var result = WpfMessageBox.Show(this, GetLongSampleText(), "Some title", MessageBoxButton.YesNoCancel, MessageBoxImage.Error);
var result = WpfMessageBox.Show(this, GetLongSampleText(), "Some title", WpfMessageBoxButton.YesNoCancel, WpfMessageBoxImage.Error);
DisplayResult(result);
}

private void ButtonWpfMsgBoxNiceExample_Click(object sender, RoutedEventArgs e)
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OKCancel,
Button = WpfMessageBoxButton.OKCancel,
ButtonOkText = "Set name",
CheckBoxText = "Don't ask again",
Image = MessageBoxImage.Exclamation,
Image = WpfMessageBoxImage.Exclamation,
Header = "No name defined",
IsCheckBoxChecked = true,
IsCheckBoxVisible = true,
Expand All @@ -127,7 +127,7 @@ private void ButtonWpfMsgBoxWithCheckBox_Click(object sender, RoutedEventArgs e)
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OKCancel,
Button = WpfMessageBoxButton.OKCancel,
CheckBoxText = "I've pre-checked this for you",
IsCheckBoxChecked = true,
IsCheckBoxVisible = true,
Expand All @@ -143,9 +143,9 @@ private void ButtonWpfMsgBoxWithHeader_Click(object sender, RoutedEventArgs e)
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OK,
Button = WpfMessageBoxButton.OK,
Header = "Some header",
Image = MessageBoxImage.Exclamation,
Image = WpfMessageBoxImage.Exclamation,
Text = "Some text",
Title = "Some title",
};
Expand All @@ -156,27 +156,27 @@ private void ButtonWpfMsgBoxWithHeader_Click(object sender, RoutedEventArgs e)

private void ButtonWpfMsgBoxWithIcon_Click(object sender, RoutedEventArgs e)
{
var result = WpfMessageBox.Show(this, "Some text", "Some title", MessageBoxButton.OK, MessageBoxImage.Exclamation);
var result = WpfMessageBox.Show(this, "Some text", "Some title", WpfMessageBoxButton.OK, WpfMessageBoxImage.Exclamation);
DisplayResult(result);
}

private void ButtonWpfMsgBoxWithoutTitle_Click(object sender, RoutedEventArgs e)
{
var result = WpfMessageBox.Show(this, "Some text", "", MessageBoxButton.OKCancel);
var result = WpfMessageBox.Show(this, "Some text", "", WpfMessageBoxButton.OKCancel);
DisplayResult(result);
}

private void ButtonWpfMsgBoxWithText_Click(object sender, RoutedEventArgs e)
{
var result = WpfMessageBox.Show(this, "Some text", "Some title", MessageBoxButton.YesNoCancel);
var result = WpfMessageBox.Show(this, "Some text", "Some title", WpfMessageBoxButton.YesNoCancel);
DisplayResult(result);
}

private void ButtonWpfMsgBoxWithTextBox_Click(object sender, RoutedEventArgs e)
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OKCancel,
Button = WpfMessageBoxButton.OKCancel,
IsTextBoxVisible = true,
Text = "Some text",
TextBoxText = "Pre-defined text",
Expand All @@ -191,7 +191,7 @@ private void ButtonWpfMsgBoxWithTextBoxAndCheckBox_Click(object sender, RoutedEv
{
var msgProperties = new WpfMessageBoxProperties
{
Button = MessageBoxButton.OKCancel,
Button = WpfMessageBoxButton.OKCancel,
CheckBoxText = "I've pre-checked this for you",
IsCheckBoxChecked = true,
IsCheckBoxVisible = true,
Expand All @@ -206,10 +206,15 @@ private void ButtonWpfMsgBoxWithTextBoxAndCheckBox_Click(object sender, RoutedEv

private void DisplayResult(MessageBoxResult result)
{
WpfMessageBox.Show(this, "Result is: DialogResult." + result, "Result", MessageBoxButton.OK, MessageBoxImage.Information);
WpfMessageBox.Show(this, "Result is: DialogResult." + result, "Result", WpfMessageBoxButton.OK, WpfMessageBoxImage.Information);
}

private void DisplayResult(MessageBoxResult result, WpfMessageBoxProperties msgProperties)
private void DisplayResult(WpfMessageBoxResult result)
{
WpfMessageBox.Show(this, "Result is: DialogResult." + result, "Result", WpfMessageBoxButton.OK, WpfMessageBoxImage.Information);
}

private void DisplayResult(WpfMessageBoxResult result, WpfMessageBoxProperties msgProperties)
{
WpfMessageBox.Show(
this,
Expand Down
3 changes: 3 additions & 0 deletions src/WpfMessageBox.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SwitchStatementHandlesSomeKnownEnumValuesWithDefault/@EntryIndexedValue">ERROR</s:String>
</wpf:ResourceDictionary>
62 changes: 31 additions & 31 deletions src/WpfMessageBox/Core/WindowMain.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Drawing;
using System.Windows;
using System.Windows.Input;

Expand Down Expand Up @@ -76,15 +75,15 @@ public string Message
}
}

public MessageBoxResult Result { get; set; }
public WpfMessageBoxResult Result { get; set; }

public string TextBoxText
{
get => TextBox.Text;
set => TextBox.Text = value;
}

public WindowMain(string message, MessageBoxButton button, MessageBoxImage image)
public WindowMain(string message, WpfMessageBoxButton button, WpfMessageBoxImage image)
{
InitializeComponent();

Expand Down Expand Up @@ -117,51 +116,51 @@ protected override void OnSourceInitialized(EventArgs e)

private void ButtonCancel_Click(object sender, RoutedEventArgs e)
{
Result = MessageBoxResult.Cancel;
Result = WpfMessageBoxResult.Cancel;
Close();
}

private void ButtonNo_Click(object sender, RoutedEventArgs e)
{
Result = MessageBoxResult.No;
Result = WpfMessageBoxResult.No;
Close();
}

private void ButtonOk_Click(object sender, RoutedEventArgs e)
{
Result = MessageBoxResult.OK;
Result = WpfMessageBoxResult.OK;
Close();
}

private void ButtonYes_Click(object sender, RoutedEventArgs e)
{
Result = MessageBoxResult.Yes;
Result = WpfMessageBoxResult.Yes;
Close();
}

private void DisplayButtons(MessageBoxButton button)
private void DisplayButtons(WpfMessageBoxButton button)
{
switch (button)
{
case MessageBoxButton.OK:
case WpfMessageBoxButton.OK:
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNo.Visibility = Visibility.Collapsed;
ButtonOk.Visibility = Visibility.Visible;
ButtonYes.Visibility = Visibility.Collapsed;
break;
case MessageBoxButton.OKCancel:
case WpfMessageBoxButton.OKCancel:
ButtonCancel.Visibility = Visibility.Visible;
ButtonNo.Visibility = Visibility.Collapsed;
ButtonOk.Visibility = Visibility.Visible;
ButtonYes.Visibility = Visibility.Collapsed;
break;
case MessageBoxButton.YesNo:
case WpfMessageBoxButton.YesNo:
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNo.Visibility = Visibility.Visible;
ButtonOk.Visibility = Visibility.Collapsed;
ButtonYes.Visibility = Visibility.Visible;
break;
case MessageBoxButton.YesNoCancel:
case WpfMessageBoxButton.YesNoCancel:
ButtonCancel.Visibility = Visibility.Visible;
ButtonNo.Visibility = Visibility.Visible;
ButtonOk.Visibility = Visibility.Collapsed;
Expand All @@ -172,51 +171,52 @@ private void DisplayButtons(MessageBoxButton button)
}
}

private void DisplayImage(MessageBoxImage image)
private void DisplayImage(WpfMessageBoxImage image)
{
switch (image)
{
case MessageBoxImage.Information:
// Also covers MessageBoxImage.Asterisk
ImageIcon.Source = SystemIcons.Information.ToImageSource();
case WpfMessageBoxImage.Information:
ImageIcon.Source = WpfMessageBoxLibrary.Resources.ImageInformation;
break;
case MessageBoxImage.Error:
// Also covers MessageBoxImage.Hand Also covers MessageBoxImage.Stop
ImageIcon.Source = SystemIcons.Error.ToImageSource();
case WpfMessageBoxImage.Error:
ImageIcon.Source = WpfMessageBoxLibrary.Resources.ImageCrossCircle;
break;
case MessageBoxImage.Warning:
// Also covers MessageBoxImage.Exclamation
ImageIcon.Source = SystemIcons.Warning.ToImageSource();
case WpfMessageBoxImage.Exclamation:
ImageIcon.Source = WpfMessageBoxLibrary.Resources.ImageExclamation;
break;
case MessageBoxImage.Question:
ImageIcon.Source = SystemIcons.Question.ToImageSource();
case WpfMessageBoxImage.Question:
ImageIcon.Source = WpfMessageBoxLibrary.Resources.ImageQuestion;
break;
default:
// Also covers MessageBoxImage.None
case WpfMessageBoxImage.Validation:
ImageIcon.Source = WpfMessageBoxLibrary.Resources.ImageTick;
break;
case WpfMessageBoxImage.None:
ImageIcon.Source = null;
break;
default:
throw new NotImplementedException();
}

ImageIcon.Visibility = ImageIcon.Source == null ? Visibility.Collapsed : Visibility.Visible;
}

private void SetDefaultAndCancelButtons(MessageBoxButton button)
private void SetDefaultAndCancelButtons(WpfMessageBoxButton button)
{
switch (button)
{
case MessageBoxButton.OK:
case WpfMessageBoxButton.OK:
ButtonOk.IsDefault = true;
ButtonOk.IsCancel = true;
break;
case MessageBoxButton.OKCancel:
case WpfMessageBoxButton.OKCancel:
ButtonOk.IsDefault = true;
ButtonCancel.IsCancel = true;
break;
case MessageBoxButton.YesNo:
case WpfMessageBoxButton.YesNo:
ButtonYes.IsDefault = true;
ButtonNo.IsCancel = true;
break;
case MessageBoxButton.YesNoCancel:
case WpfMessageBoxButton.YesNoCancel:
ButtonYes.IsDefault = true;
ButtonCancel.IsCancel = true;
break;
Expand Down
Loading