From f04d7d0d28e5d73104dad6c985b9e75f13d114fd Mon Sep 17 00:00:00 2001 From: "Shyam Gupta (DevDiv)" Date: Wed, 12 Aug 2026 12:27:00 -0700 Subject: [PATCH 1/4] Restoring autoConvert to .NET 8.0 in Clipboard APIs --- .../src/PresentationCore/System/Windows/clipboard.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs index b7a5f4d48c9..c31bb3d14f0 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs @@ -83,14 +83,16 @@ public static bool ContainsText(TextDataFormat format) => !DataFormats.IsValidTe private static T? GetTypedDataIfAvailable<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format) { IDataObject? data = GetDataObject(); + + bool autoConvert = IsDataFormatAutoConvert(format); if (data is ITypedDataObject typed) { - return typed.TryGetData(format, autoConvert: true, out T? value) ? value : default; + return typed.TryGetData(format, autoConvert, out T? value) ? value : default; } if (data is IDataObject dataObject) { - return dataObject.GetData(format, autoConvert: true) is T value ? value : default; + return dataObject.GetData(format, autoConvert) is T value ? value : default; } return default; From 6f4cb02dd2f32fade0fbf96f294141697bea5036 Mon Sep 17 00:00:00 2001 From: "Shyam Gupta (DevDiv)" Date: Wed, 12 Aug 2026 13:45:29 -0700 Subject: [PATCH 2/4] Added unit test --- .../System/Windows/ClipboardTests.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows/ClipboardTests.cs b/src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows/ClipboardTests.cs index e22d3de5237..2b7ed20568f 100644 --- a/src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows/ClipboardTests.cs +++ b/src/Microsoft.DotNet.Wpf/tests/UnitTests/PresentationCore.Tests/System/Windows/ClipboardTests.cs @@ -225,6 +225,27 @@ public void SetDataObject_WithMultipleData(bool copy) result2.Should().Be(testData2); } + [WpfTheory] + [InlineData(TextDataFormat.Text, TextDataFormat.UnicodeText)] + [InlineData(TextDataFormat.UnicodeText, TextDataFormat.Text)] + public void GetText_AutoConvertibleFormat_DoesNotAutoConvert( + TextDataFormat sourceFormat, + TextDataFormat requestedFormat) + { + const string text = "Hello, World!"; + string sourceDataFormat = DataFormats.ConvertToDataFormats(sourceFormat); + string requestedDataFormat = DataFormats.ConvertToDataFormats(requestedFormat); + DataObject dataObject = new(); + dataObject.SetData(sourceDataFormat, text, autoConvert: true); + + dataObject.GetData(requestedDataFormat, autoConvert: true).Should().Be(text); + dataObject.GetData(requestedDataFormat, autoConvert: false).Should().BeNull(); + + Clipboard.SetDataObject(dataObject); + + Clipboard.GetText(requestedFormat).Should().BeEmpty(); + } + [WpfFact] public void SetData_Text_Format_AllUpper() { From 643d4adef213d6be753fef61b4b3cf4a04bab8d3 Mon Sep 17 00:00:00 2001 From: "Shyam Gupta (DevDiv)" Date: Wed, 12 Aug 2026 14:43:52 -0700 Subject: [PATCH 3/4] Also setting autoConvert to false in one of the TryGetData overload. --- .../src/PresentationCore/System/Windows/clipboard.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs index c31bb3d14f0..6e875ee8f2c 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs @@ -487,7 +487,7 @@ public static bool TryGetData( return false; } - return dataObject.TryGetData(format, out data); + return dataObject.TryGetData(format, autoConvert: false, out data); } /// From d2f87e6967dfb4ce9f9bb85ee46155eaed9fbc89 Mon Sep 17 00:00:00 2001 From: "Shyam Gupta (DevDiv)" Date: Wed, 12 Aug 2026 14:45:02 -0700 Subject: [PATCH 4/4] Formatting --- .../src/PresentationCore/System/Windows/clipboard.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs index 6e875ee8f2c..0133ff42fa6 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs @@ -83,8 +83,8 @@ public static bool ContainsText(TextDataFormat format) => !DataFormats.IsValidTe private static T? GetTypedDataIfAvailable<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(string format) { IDataObject? data = GetDataObject(); - bool autoConvert = IsDataFormatAutoConvert(format); + if (data is ITypedDataObject typed) { return typed.TryGetData(format, autoConvert, out T? value) ? value : default;