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

  1. Ensure the XamlPackage's root XAML element is a Section or Span
  2. Regenerate the payload by saving via TextRange.Save(..., DataFormats.XamlPackage)
  3. 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

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


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)