dotnet/wpf · error · ArgumentException
SR.TextRange_UnrecognizedStructureInDataFormat (dataFormat)
Error message
SR.TextRange_UnrecognizedStructureInDataFormat (dataFormat)
What it means
TextRangeBase.Load throws ArgumentException when the stream for dataFormat XamlPackage deserializes via WpfPayload.LoadElement to something other than a Section or Span. A XamlPackage payload must contain a Section or Span as its root text structure; anything else is rejected. The message includes the dataFormat.
Solutions
- Ensure the XamlPackage's root XAML element is a Section or Span
- Regenerate the payload by saving via TextRange.Save(..., DataFormats.XamlPackage)
- If loading arbitrary XAML, wrap content in a Span before packaging
Example fix
// before // xamlpackage root: <TextBlock>...</TextBlock> // after // xamlpackage root: <Span>...</Span> (or <Section>...</Section>)
Defensive patterns
Strategy: validation
Validate before calling
// pre-inspect package payload root before Load // var element = WpfPayload.LoadElement(copyOfStream); // ok = element is Section or Span; stream.Position = 0;
Try / catch
try { range.Load(stream, DataFormats.XamlPackage); } catch (ArgumentException ex) { /* unrecognized structure in package */ } Prevention
- Only consume XamlPackage payloads produced by TextRange.Save
- Never hand-write package roots other than Section/Span
When it happens
Trigger: Calling TextRange.Load(stream, DataFormats.XamlPackage) with a XamlPackage whose root element is a TextBlock, Paragraph, or arbitrary UIElement instead of Section/Span.
Common situations: Hand-constructed or third-party-generated XamlPackage payloads; packages produced by other tools with a different root element; corrupted or truncated payload streams.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Animation_ChildMustBeKeyFrame
- Animation_ChildMustBeKeyFrame
- Animation_NoTextChildren
- Animation_NoTextChildren
- ArgumentException: path
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/fcb38f1a6005a906.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/TextRangeBase.cs:1572
if (dataFormat == DataFormats.Text)
{
StreamReader textStreamReader = new StreamReader(stream);
string text = textStreamReader.ReadToEnd();
thisRange.Text = text;
}
else if (dataFormat == DataFormats.Xaml)
{
StreamReader xamlStreamReader = new StreamReader(stream);
string xamlText = xamlStreamReader.ReadToEnd();
thisRange.Xml = xamlText;
}
else if (dataFormat == DataFormats.XamlPackage)
{
object element = WpfPayload.LoadElement(stream);
if (!(element is Section) && !(element is Span))
{
throw new ArgumentException(SR.Format(SR.TextRange_UnrecognizedStructureInDataFormat, dataFormat), nameof(stream));
}
thisRange.SetXmlVirtual((TextElement)element);
}
else if (dataFormat == DataFormats.Rtf)
{
// Need to use streams instead of intrermediate strings
StreamReader rtfStreamReader = new StreamReader(stream);
string rtfText = rtfStreamReader.ReadToEnd();
MemoryStream memoryStream = TextEditorCopyPaste.ConvertRtfToXaml(rtfText);
if (memoryStream == null)
{
throw new ArgumentException(SR.Format(SR.TextRange_UnrecognizedStructureInDataFormat, dataFormat), nameof(stream));
}
TextElement textElement = WpfPayload.LoadElement(memoryStream) as TextElement;
if (!(textElement is Section) && !(textElement is Span))
{
throw new ArgumentException(SR.Format(SR.TextRange_UnrecognizedStructureInDataFormat, dataFormat), nameof(stream));
}View on GitHub (pinned to 81131a70a4)