diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileParser.cs b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileParser.cs index 3d20b7b49005..e418d91e1aef 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileParser.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileParser.cs @@ -469,10 +469,18 @@ private XamlMemberDefinition VisitMember(XamlXmlReader reader, XamlObjectDefinit return member; } - private bool IsLiteralInlineText(object value, XamlMemberDefinition member, XamlObjectDefinition xamlObject) + private static bool IsLiteralInlineText(object value, XamlMemberDefinition member, XamlObjectDefinition xamlObject) { return value is string - && (xamlObject.Type.Name == "TextBlock" || xamlObject.Type.Name == "Span") + && ( + xamlObject.Type.Name is "TextBlock" + or "Bold" + or "Hyperlink" + or "Italic" + or "Underline" + or "Span" + or "Paragraph" + ) && (member.Member.Name == "_UnknownContent" || member.Member.Name == "Inlines"); } diff --git a/src/Uno.UI.Tests/Windows_UI_Xaml_Markup/XamlReaderTests/Given_XamlReader.cs b/src/Uno.UI.Tests/Windows_UI_Xaml_Markup/XamlReaderTests/Given_XamlReader.cs index fba4b6e3d73a..293740d81560 100644 --- a/src/Uno.UI.Tests/Windows_UI_Xaml_Markup/XamlReaderTests/Given_XamlReader.cs +++ b/src/Uno.UI.Tests/Windows_UI_Xaml_Markup/XamlReaderTests/Given_XamlReader.cs @@ -1254,6 +1254,31 @@ public void When_StaticResource_In_ResourceDictionary() Assert.AreEqual(b2.Color, c2); } + [TestMethod] + public void When_Run_In_Inlines_Span() + { + When_Run_In_Inlines_Helper("Span", p => ((Span)p).Inlines); + } + + [TestMethod] + public void When_Run_In_Inlines_Paragraph() + { + When_Run_In_Inlines_Helper("Paragraph", p => ((Paragraph)p).Inlines); + } + + private void When_Run_In_Inlines_Helper(string rootName, Func getInlines) + { + var root = Windows.UI.Xaml.Markup.XamlReader.Load($@"<{rootName} xml:space=""preserve"" xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">regular textbold textunderline textitalic textthis is a hyperlinkmore regular text"); + var inlines = getInlines(root).ToArray(); + Assert.AreEqual(6, inlines.Length); + Assert.AreEqual("regular text", ((Run)inlines[0]).Text); + Assert.AreEqual("bold text", ((Run)((Bold)inlines[1]).Inlines.Single()).Text); + Assert.AreEqual("underline text", ((Run)((Underline)inlines[2]).Inlines.Single()).Text); + Assert.AreEqual("italic text", ((Run)((Italic)inlines[3]).Inlines.Single()).Text); + Assert.AreEqual("this is a hyperlink", ((Run)((Hyperlink)inlines[4]).Inlines.Single()).Text); + Assert.AreEqual("more regular text", ((Run)inlines[5]).Text); + } + /// /// XamlReader.Load the xaml and type-check result. /// diff --git a/src/Uno.UI/UI/Xaml/Documents/InlineCollection.cs b/src/Uno.UI/UI/Xaml/Documents/InlineCollection.cs index a697c238ce39..391f0387fb04 100644 --- a/src/Uno.UI/UI/Xaml/Documents/InlineCollection.cs +++ b/src/Uno.UI/UI/Xaml/Documents/InlineCollection.cs @@ -49,7 +49,7 @@ private void OnCollectionChanged() public bool Contains(Inline item) => _collection.Contains(item); /// - public void CopyTo(Inline[] array, int arrayIndex) => throw new NotSupportedException(); + public void CopyTo(Inline[] array, int arrayIndex) => _collection.CopyTo(array, arrayIndex); /// public bool Remove(Inline item) => _collection.Remove(item); diff --git a/src/Uno.UI/UI/Xaml/Markup/Reader/XamlStringParser.cs b/src/Uno.UI/UI/Xaml/Markup/Reader/XamlStringParser.cs index 8780532268fa..74d598e45ead 100644 --- a/src/Uno.UI/UI/Xaml/Markup/Reader/XamlStringParser.cs +++ b/src/Uno.UI/UI/Xaml/Markup/Reader/XamlStringParser.cs @@ -170,15 +170,17 @@ private XamlMemberDefinition VisitMember(XamlXmlReader reader, XamlObjectDefinit return member; } - private bool IsLiteralInlineText(object value, XamlMemberDefinition member, XamlObjectDefinition xamlObject) + private static bool IsLiteralInlineText(object value, XamlMemberDefinition member, XamlObjectDefinition xamlObject) { return value is string && ( - xamlObject.Type.Name == nameof(Controls.TextBlock) - || xamlObject.Type.Name == nameof(Documents.Bold) - || xamlObject.Type.Name == nameof(Documents.Hyperlink) - || xamlObject.Type.Name == nameof(Documents.Italic) - || xamlObject.Type.Name == nameof(Documents.Underline) + xamlObject.Type.Name is nameof(Controls.TextBlock) + or nameof(Documents.Bold) + or nameof(Documents.Hyperlink) + or nameof(Documents.Italic) + or nameof(Documents.Underline) + or nameof(Documents.Span) + or nameof(Documents.Paragraph) ) && (member.Member.Name == "_UnknownContent" || member.Member.Name == "Inlines"); }