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..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,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; @@ -485,7 +487,7 @@ public static bool TryGetData( return false; } - return dataObject.TryGetData(format, out data); + return dataObject.TryGetData(format, autoConvert: false, out data); } /// 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() {