From ce292b6d87c38a1f8756e2d6bb55a9c27270614f Mon Sep 17 00:00:00 2001
From: BornToBeRoot <16019165+BornToBeRoot@users.noreply.github.com>
Date: Mon, 14 Jul 2025 00:32:25 +0200
Subject: [PATCH] Fix: 3099
---
...hildWindowIconToRectangleStyleConverter.cs | 33 +++++++++++++++++++
.../ChildWindowIcon.cs | 22 +++++++++++++
.../Templates/ValidationErrorTemplates.xaml | 2 +-
.../ViewModels/HostsFileEditorViewModel.cs | 2 +-
.../ViewModels/OKMessageViewModel.cs | 18 +++++++++-
.../Views/OKMessageChildWindow.xaml | 7 +++-
6 files changed, 80 insertions(+), 4 deletions(-)
create mode 100644 Source/NETworkManager.Converters/ChildWindowIconToRectangleStyleConverter.cs
create mode 100644 Source/NETworkManager.Utilities/ChildWindowIcon.cs
diff --git a/Source/NETworkManager.Converters/ChildWindowIconToRectangleStyleConverter.cs b/Source/NETworkManager.Converters/ChildWindowIconToRectangleStyleConverter.cs
new file mode 100644
index 0000000000..284d989e50
--- /dev/null
+++ b/Source/NETworkManager.Converters/ChildWindowIconToRectangleStyleConverter.cs
@@ -0,0 +1,33 @@
+using NETworkManager.Utilities;
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace NETworkManager.Converters;
+
+public sealed class ChildWindowIconToRectangleStyleConverter : IValueConverter
+{
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is not ChildWindowIcon icon)
+ return null;
+
+ switch (icon)
+ {
+ case ChildWindowIcon.Info:
+ return Application.Current.FindResource("InfoImageRectangle");
+ case ChildWindowIcon.Warn:
+ return Application.Current.FindResource("WarnImageRectangle");
+ case ChildWindowIcon.Error:
+ return Application.Current.FindResource("ErrorImageRectangle");
+ default:
+ return null;
+ }
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
\ No newline at end of file
diff --git a/Source/NETworkManager.Utilities/ChildWindowIcon.cs b/Source/NETworkManager.Utilities/ChildWindowIcon.cs
new file mode 100644
index 0000000000..f5b75971c9
--- /dev/null
+++ b/Source/NETworkManager.Utilities/ChildWindowIcon.cs
@@ -0,0 +1,22 @@
+namespace NETworkManager.Utilities;
+
+///
+/// Ions for child dialogs.
+///
+public enum ChildWindowIcon
+{
+ ///
+ /// Information icon.
+ ///
+ Info,
+
+ ///
+ /// Warning icon.
+ ///
+ Warn,
+
+ ///
+ /// Error icon.
+ ///
+ Error,
+}
diff --git a/Source/NETworkManager/Resources/Templates/ValidationErrorTemplates.xaml b/Source/NETworkManager/Resources/Templates/ValidationErrorTemplates.xaml
index b1509dfe5f..c6bcbd4ac4 100644
--- a/Source/NETworkManager/Resources/Templates/ValidationErrorTemplates.xaml
+++ b/Source/NETworkManager/Resources/Templates/ValidationErrorTemplates.xaml
@@ -11,7 +11,7 @@
-->
diff --git a/Source/NETworkManager/ViewModels/HostsFileEditorViewModel.cs b/Source/NETworkManager/ViewModels/HostsFileEditorViewModel.cs
index f08b0c3ae7..1360751332 100644
--- a/Source/NETworkManager/ViewModels/HostsFileEditorViewModel.cs
+++ b/Source/NETworkManager/ViewModels/HostsFileEditorViewModel.cs
@@ -452,7 +452,7 @@ private async Task ShowErrorMessageAsync(HostsFileEntryModifyResult result)
{
childWindow.IsOpen = false;
ConfigurationManager.Current.IsChildWindowOpen = false;
- }, message);
+ }, message, Strings.OK, ChildWindowIcon.Error);
childWindow.Title = Strings.Error;
diff --git a/Source/NETworkManager/ViewModels/OKMessageViewModel.cs b/Source/NETworkManager/ViewModels/OKMessageViewModel.cs
index 24d2374437..fca5f22912 100644
--- a/Source/NETworkManager/ViewModels/OKMessageViewModel.cs
+++ b/Source/NETworkManager/ViewModels/OKMessageViewModel.cs
@@ -6,13 +6,14 @@ namespace NETworkManager.ViewModels;
public class OKMessageViewModel : ViewModelBase
{
- public OKMessageViewModel(Action okCommand, string message, string okButtonText = null)
+ public OKMessageViewModel(Action okCommand, string message, string okButtonText = null, ChildWindowIcon icon = ChildWindowIcon.Info)
{
OKCommand = new RelayCommand(_ => okCommand(this));
Message = message;
OKButtonText = okButtonText ?? Localization.Resources.Strings.OK;
+ Icon = icon;
}
public ICommand OKCommand { get; }
@@ -46,4 +47,19 @@ private init
OnPropertyChanged();
}
}
+
+ private ChildWindowIcon _icon;
+
+ public ChildWindowIcon Icon
+ {
+ get => _icon;
+ private init
+ {
+ if (value == _icon)
+ return;
+
+ _icon = value;
+ OnPropertyChanged();
+ }
+ }
}
diff --git a/Source/NETworkManager/Views/OKMessageChildWindow.xaml b/Source/NETworkManager/Views/OKMessageChildWindow.xaml
index e15c72619d..c7aece31fb 100644
--- a/Source/NETworkManager/Views/OKMessageChildWindow.xaml
+++ b/Source/NETworkManager/Views/OKMessageChildWindow.xaml
@@ -7,6 +7,7 @@
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
xmlns:simpleChildWindow="clr-namespace:MahApps.Metro.SimpleChildWindow;assembly=MahApps.Metro.SimpleChildWindow"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
+ xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
ChildWindowWidth="450"
ChildWindowMaxHeight="500"
ShowTitleBar="True"
@@ -17,7 +18,11 @@
CloseByEscape="False"
OverlayBrush="{DynamicResource ResourceKey=MahApps.Brushes.Gray.SemiTransparent}"
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:OKMessageViewModel}">
+
+
+
+
@@ -34,7 +39,7 @@
+ Style="{Binding Icon, Converter={StaticResource ChildWindowIconToRectangleStyleConverter}}" />