From 1407e4960b2d122cdc9f8113e59a664db61fe8cf Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 10 Oct 2025 06:49:09 +0000
Subject: [PATCH 1/5] Initial plan
From 04d8d33b9575bea86bcda917b508b247728fffe2 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 10 Oct 2025 06:57:08 +0000
Subject: [PATCH 2/5] Add ObjectToStringConverter and apply to
AutomationProperties.Name bindings
Co-authored-by: Keboo <952248+Keboo@users.noreply.github.com>
---
.../Converters/ObjectToStringConverter.cs | 21 +++++++++++++++++++
.../MaterialDesignTheme.AutoSuggestBox.xaml | 2 +-
.../Themes/MaterialDesignTheme.ComboBox.xaml | 2 +-
.../MaterialDesignTheme.DatePicker.xaml | 2 +-
.../MaterialDesignTheme.NumericUpDown.xaml | 2 +-
.../MaterialDesignTheme.PasswordBox.xaml | 4 ++--
.../Themes/MaterialDesignTheme.TextBox.xaml | 2 +-
.../MaterialDesignTheme.TimePicker.xaml | 2 +-
8 files changed, 29 insertions(+), 8 deletions(-)
create mode 100644 src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs
diff --git a/src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs b/src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs
new file mode 100644
index 0000000000..1f727c626f
--- /dev/null
+++ b/src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs
@@ -0,0 +1,21 @@
+using System.Globalization;
+using System.Windows.Data;
+
+namespace MaterialDesignThemes.Wpf.Converters;
+
+public class ObjectToStringConverter : IValueConverter
+{
+ public static readonly ObjectToStringConverter Instance = new();
+
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is string stringValue)
+ {
+ return stringValue;
+ }
+ return string.Empty;
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ => throw new NotImplementedException();
+}
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
index ca15834f6b..1a8c6d21d6 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
@@ -23,7 +23,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
index b8d44aaffe..8c2444f4b2 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
@@ -884,7 +884,7 @@
-
+
@@ -609,7 +609,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
index be6978467e..e7f3965709 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
@@ -53,7 +53,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
index 83cfbea660..0fdacc6208 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
@@ -11,7 +11,7 @@
-
+
From 525cfccfd1a8e10e14c591d1a2f26f7b0c8daa1d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 10 Oct 2025 06:58:26 +0000
Subject: [PATCH 3/5] Add unit tests for ObjectToStringConverter
Co-authored-by: Keboo <952248+Keboo@users.noreply.github.com>
---
.../ObjectToStringConverterTests.cs | 54 +++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs
diff --git a/tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs b/tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs
new file mode 100644
index 0000000000..759167b231
--- /dev/null
+++ b/tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs
@@ -0,0 +1,54 @@
+using System.Globalization;
+using MaterialDesignThemes.Wpf.Converters;
+using TUnit.Core;
+using TUnit.Assertions;
+using TUnit.Assertions.Extensions;
+using System.Threading.Tasks;
+
+namespace MaterialDesignThemes.Wpf.Tests.Converters;
+
+public sealed class ObjectToStringConverterTests
+{
+ [Test]
+ public async Task Convert_StringValue_ReturnsOriginalString()
+ {
+ var converter = ObjectToStringConverter.Instance;
+ string input = "Test String";
+
+ var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
+
+ await Assert.That(result).IsEqualTo(input);
+ }
+
+ [Test]
+ public async Task Convert_NullValue_ReturnsEmptyString()
+ {
+ var converter = ObjectToStringConverter.Instance;
+
+ var result = converter.Convert(null, typeof(string), null, CultureInfo.InvariantCulture);
+
+ await Assert.That(result).IsEqualTo(string.Empty);
+ }
+
+ [Test]
+ public async Task Convert_NonStringValue_ReturnsEmptyString()
+ {
+ var converter = ObjectToStringConverter.Instance;
+ int input = 42;
+
+ var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
+
+ await Assert.That(result).IsEqualTo(string.Empty);
+ }
+
+ [Test]
+ public async Task Convert_EmptyString_ReturnsEmptyString()
+ {
+ var converter = ObjectToStringConverter.Instance;
+ string input = string.Empty;
+
+ var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
+
+ await Assert.That(result).IsEqualTo(string.Empty);
+ }
+}
From c15c9f8480193dba9118ed789e674a0e749dc309 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 11 Oct 2025 00:59:45 +0000
Subject: [PATCH 4/5] Rename ObjectToStringConverter to
AutomationPropertiesNameConverter and move to Internal namespace
Co-authored-by: Keboo <952248+Keboo@users.noreply.github.com>
---
.../AutomationPropertiesNameConverter.cs} | 6 +++---
.../Themes/MaterialDesignTheme.AutoSuggestBox.xaml | 2 +-
.../Themes/MaterialDesignTheme.ComboBox.xaml | 2 +-
.../Themes/MaterialDesignTheme.DatePicker.xaml | 2 +-
.../Themes/MaterialDesignTheme.NumericUpDown.xaml | 2 +-
.../Themes/MaterialDesignTheme.PasswordBox.xaml | 4 ++--
.../Themes/MaterialDesignTheme.TextBox.xaml | 2 +-
.../Themes/MaterialDesignTheme.TimePicker.xaml | 2 +-
....cs => AutomationPropertiesNameConverterTests.cs} | 12 ++++++------
9 files changed, 17 insertions(+), 17 deletions(-)
rename src/MaterialDesignThemes.Wpf/Converters/{ObjectToStringConverter.cs => Internal/AutomationPropertiesNameConverter.cs} (68%)
rename tests/MaterialDesignThemes.Wpf.Tests/Converters/{ObjectToStringConverterTests.cs => AutomationPropertiesNameConverterTests.cs} (77%)
diff --git a/src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs b/src/MaterialDesignThemes.Wpf/Converters/Internal/AutomationPropertiesNameConverter.cs
similarity index 68%
rename from src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs
rename to src/MaterialDesignThemes.Wpf/Converters/Internal/AutomationPropertiesNameConverter.cs
index 1f727c626f..2a5a8d6862 100644
--- a/src/MaterialDesignThemes.Wpf/Converters/ObjectToStringConverter.cs
+++ b/src/MaterialDesignThemes.Wpf/Converters/Internal/AutomationPropertiesNameConverter.cs
@@ -1,11 +1,11 @@
using System.Globalization;
using System.Windows.Data;
-namespace MaterialDesignThemes.Wpf.Converters;
+namespace MaterialDesignThemes.Wpf.Converters.Internal;
-public class ObjectToStringConverter : IValueConverter
+public class AutomationPropertiesNameConverter : IValueConverter
{
- public static readonly ObjectToStringConverter Instance = new();
+ public static readonly AutomationPropertiesNameConverter Instance = new();
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
{
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
index 1a8c6d21d6..da6c2b8486 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.AutoSuggestBox.xaml
@@ -23,7 +23,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
index 8c2444f4b2..eb43db54f6 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml
@@ -884,7 +884,7 @@
-
+
@@ -609,7 +609,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
index e7f3965709..e80e3ef2e7 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TextBox.xaml
@@ -53,7 +53,7 @@
-
+
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
index 0fdacc6208..9d3008b213 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
@@ -11,7 +11,7 @@
-
+
diff --git a/tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs b/tests/MaterialDesignThemes.Wpf.Tests/Converters/AutomationPropertiesNameConverterTests.cs
similarity index 77%
rename from tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs
rename to tests/MaterialDesignThemes.Wpf.Tests/Converters/AutomationPropertiesNameConverterTests.cs
index 759167b231..b2345bbb58 100644
--- a/tests/MaterialDesignThemes.Wpf.Tests/Converters/ObjectToStringConverterTests.cs
+++ b/tests/MaterialDesignThemes.Wpf.Tests/Converters/AutomationPropertiesNameConverterTests.cs
@@ -1,5 +1,5 @@
using System.Globalization;
-using MaterialDesignThemes.Wpf.Converters;
+using MaterialDesignThemes.Wpf.Converters.Internal;
using TUnit.Core;
using TUnit.Assertions;
using TUnit.Assertions.Extensions;
@@ -7,12 +7,12 @@
namespace MaterialDesignThemes.Wpf.Tests.Converters;
-public sealed class ObjectToStringConverterTests
+public sealed class AutomationPropertiesNameConverterTests
{
[Test]
public async Task Convert_StringValue_ReturnsOriginalString()
{
- var converter = ObjectToStringConverter.Instance;
+ var converter = AutomationPropertiesNameConverter.Instance;
string input = "Test String";
var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
@@ -23,7 +23,7 @@ public async Task Convert_StringValue_ReturnsOriginalString()
[Test]
public async Task Convert_NullValue_ReturnsEmptyString()
{
- var converter = ObjectToStringConverter.Instance;
+ var converter = AutomationPropertiesNameConverter.Instance;
var result = converter.Convert(null, typeof(string), null, CultureInfo.InvariantCulture);
@@ -33,7 +33,7 @@ public async Task Convert_NullValue_ReturnsEmptyString()
[Test]
public async Task Convert_NonStringValue_ReturnsEmptyString()
{
- var converter = ObjectToStringConverter.Instance;
+ var converter = AutomationPropertiesNameConverter.Instance;
int input = 42;
var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
@@ -44,7 +44,7 @@ public async Task Convert_NonStringValue_ReturnsEmptyString()
[Test]
public async Task Convert_EmptyString_ReturnsEmptyString()
{
- var converter = ObjectToStringConverter.Instance;
+ var converter = AutomationPropertiesNameConverter.Instance;
string input = string.Empty;
var result = converter.Convert(input, typeof(string), null, CultureInfo.InvariantCulture);
From 8aeb89cbe4f1fe0a885ef13a481e58f2acd7a039 Mon Sep 17 00:00:00 2001
From: Kevin Bost
Date: Thu, 23 Oct 2025 21:06:19 -0700
Subject: [PATCH 5/5] Adds internal converters XAML namespace
Registers the 'convertersInternal' XML namespace in the DatePicker, NumericUpDown, and TimePicker theme dictionaries.
---
.../Themes/MaterialDesignTheme.DatePicker.xaml | 1 +
.../Themes/MaterialDesignTheme.NumericUpDown.xaml | 1 +
.../Themes/MaterialDesignTheme.TimePicker.xaml | 1 +
3 files changed, 3 insertions(+)
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml
index 111007d55a..cc84b241ad 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.DatePicker.xaml
@@ -1,6 +1,7 @@
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.NumericUpDown.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.NumericUpDown.xaml
index 9f60246280..391a544bdb 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.NumericUpDown.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.NumericUpDown.xaml
@@ -1,6 +1,7 @@
diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
index 9d3008b213..28b5aa51bf 100644
--- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
+++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.TimePicker.xaml
@@ -1,6 +1,7 @@