diff --git a/src/Controls/src/Core/Button/Button.Mapper.cs b/src/Controls/src/Core/Button/Button.Mapper.cs index 53bbdb65d5e9..dd646238f709 100644 --- a/src/Controls/src/Core/Button/Button.Mapper.cs +++ b/src/Controls/src/Core/Button/Button.Mapper.cs @@ -28,7 +28,7 @@ public partial class Button #endif ButtonHandler.Mapper.ReplaceMapping(nameof(Text), MapText); - ButtonHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + ButtonHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); ButtonHandler.Mapper.ReplaceMapping(nameof(Button.LineBreakMode), MapLineBreakMode); } @@ -44,5 +44,16 @@ public static void MapContentLayout(IButtonHandler handler, Button button) public static void MapContentLayout(ButtonHandler handler, Button button) => MapContentLayout((IButtonHandler)handler, button); + + static void MapTextTransform(IButtonHandler handler, Button button) + { + if (button.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, button); + } } } diff --git a/src/Controls/src/Core/Button/Button.iOS.cs b/src/Controls/src/Core/Button/Button.iOS.cs index 61aacab8929d..fca110ac609a 100644 --- a/src/Controls/src/Core/Button/Button.iOS.cs +++ b/src/Controls/src/Core/Button/Button.iOS.cs @@ -447,6 +447,12 @@ private static void MapPadding(IButtonHandler handler, Button button) public static void MapText(IButtonHandler handler, Button button) { handler.PlatformView?.UpdateText(button); + + if (!handler.IsConnectingHandler()) + { + // Any text update requires that we update any attributed string formatting + ButtonHandler.MapFormatting(handler, button); + } } internal static void MapBorderWidth(IButtonHandler handler, Button button) diff --git a/src/Controls/src/Core/Editor/Editor.Android.cs b/src/Controls/src/Core/Editor/Editor.Android.cs index ad20b36d33e4..3c2ea82658a5 100644 --- a/src/Controls/src/Core/Editor/Editor.Android.cs +++ b/src/Controls/src/Core/Editor/Editor.Android.cs @@ -34,5 +34,17 @@ public static void MapText(EditorHandler2 handler, Editor editor) Platform.EditTextExtensions.UpdateText(handler.PlatformView, editor); } + + // Material3 specific overload for EditorHandler2 + internal static void MapTextTransform(EditorHandler2 handler, Editor editor) + { + if (editor.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, editor); + } } } diff --git a/src/Controls/src/Core/Editor/Editor.Mapper.cs b/src/Controls/src/Core/Editor/Editor.Mapper.cs index e76abb40f447..a41a5b1252b8 100644 --- a/src/Controls/src/Core/Editor/Editor.Mapper.cs +++ b/src/Controls/src/Core/Editor/Editor.Mapper.cs @@ -13,13 +13,13 @@ public partial class Editor EditorHandler.Mapper.ReplaceMapping(PlatformConfiguration.WindowsSpecific.InputView.DetectReadingOrderFromContentProperty.PropertyName, MapDetectReadingOrderFromContent); #endif EditorHandler.Mapper.ReplaceMapping(nameof(Text), MapText); - EditorHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + EditorHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); #if ANDROID if (RuntimeFeature.IsMaterial3Enabled) { EditorHandler2.Mapper.ReplaceMapping(nameof(Text), MapText); - EditorHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + EditorHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); EditorHandler2.Mapper.AppendToMapping(nameof(VisualElement.IsFocused), InputView.MapIsFocused); EditorHandler2.CommandMapper.PrependToMapping(nameof(IEditor.Focus), InputView.MapFocus); } @@ -38,5 +38,16 @@ public partial class Editor EditorHandler.CommandMapper.PrependToMapping(nameof(IEditor.Focus), InputView.MapFocus); #endif } + + static void MapTextTransform(IEditorHandler handler, Editor editor) + { + if (editor.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, editor); + } } -} \ No newline at end of file +} diff --git a/src/Controls/src/Core/Editor/Editor.iOS.cs b/src/Controls/src/Core/Editor/Editor.iOS.cs index 93b1319df8f3..19f05321a85f 100644 --- a/src/Controls/src/Core/Editor/Editor.iOS.cs +++ b/src/Controls/src/Core/Editor/Editor.iOS.cs @@ -19,8 +19,11 @@ public static void MapText(IEditorHandler handler, Editor editor) { Platform.TextExtensions.UpdateText(handler.PlatformView, editor); - // Any text changes in the editor field require recalculating the CharacterSpacing by regenerating the attributed string to properly apply the spacing and override the current text formatting. - handler?.UpdateValue(nameof(CharacterSpacing)); + if (!handler.IsConnectingHandler()) + { + // Any text changes in the editor field require recalculating the CharacterSpacing by regenerating the attributed string to properly apply the spacing and override the current text formatting. + handler?.UpdateValue(nameof(CharacterSpacing)); + } } } } diff --git a/src/Controls/src/Core/Entry/Entry.Android.cs b/src/Controls/src/Core/Entry/Entry.Android.cs index a37ffeebfee0..7757f73b206d 100644 --- a/src/Controls/src/Core/Entry/Entry.Android.cs +++ b/src/Controls/src/Core/Entry/Entry.Android.cs @@ -56,5 +56,17 @@ public static void MapText(EntryHandler2 handler, Entry entry) Platform.EditTextExtensions.UpdateText(handler.PlatformView.EditText, entry); } + + // Material3 specific overload for EntryHandler2 + internal static void MapTextTransform(EntryHandler2 handler, Entry entry) + { + if (entry.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, entry); + } } } diff --git a/src/Controls/src/Core/Entry/Entry.Mapper.cs b/src/Controls/src/Core/Entry/Entry.Mapper.cs index 1d3d9285c740..fbb3a35bf679 100644 --- a/src/Controls/src/Core/Entry/Entry.Mapper.cs +++ b/src/Controls/src/Core/Entry/Entry.Mapper.cs @@ -18,7 +18,7 @@ public partial class Entry EntryHandler.Mapper.ReplaceMapping(PlatformConfiguration.iOSSpecific.Entry.AdjustsFontSizeToFitWidthProperty.PropertyName, MapAdjustsFontSizeToFitWidth); #endif EntryHandler.Mapper.ReplaceMapping(nameof(Text), MapText); - EntryHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + EntryHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); // Material3 Entry Handler mappings #if ANDROID @@ -26,7 +26,7 @@ public partial class Entry { EntryHandler2.Mapper.ReplaceMapping(PlatformConfiguration.AndroidSpecific.Entry.ImeOptionsProperty.PropertyName, MapImeOptions); EntryHandler2.Mapper.ReplaceMapping(nameof(Text), MapText); - EntryHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + EntryHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); EntryHandler2.Mapper.AppendToMapping(nameof(VisualElement.IsFocused), InputView.MapIsFocused); EntryHandler2.Mapper.AppendToMapping(nameof(VisualElement.IsVisible), InputView.MapIsVisible); EntryHandler2.CommandMapper.PrependToMapping(nameof(IEntry.Focus), InputView.MapFocus); @@ -42,5 +42,16 @@ public partial class Entry EntryHandler.CommandMapper.PrependToMapping(nameof(IEntry.Focus), InputView.MapFocus); #endif } + + static void MapTextTransform(IEntryHandler handler, Entry entry) + { + if (entry.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, entry); + } } } diff --git a/src/Controls/src/Core/Entry/Entry.iOS.cs b/src/Controls/src/Core/Entry/Entry.iOS.cs index 25a6281483a1..20407ae151b3 100644 --- a/src/Controls/src/Core/Entry/Entry.iOS.cs +++ b/src/Controls/src/Core/Entry/Entry.iOS.cs @@ -16,7 +16,14 @@ public static void MapAdjustsFontSizeToFitWidth(IEntryHandler handler, Entry ent public static void MapText(IEntryHandler handler, Entry entry) { Platform.TextExtensions.UpdateText(handler.PlatformView, entry); - EntryHandler.MapFormatting(handler, entry); + + if (!handler.IsConnectingHandler()) + { + // If we're not connecting the handler, we need to update the text formatting + // This is because the text may have changed, and we need to ensure that + // any attributed string formatting is applied correctly. + EntryHandler.MapFormatting(handler, entry); + } } public static void MapCursorColor(EntryHandler handler, Entry entry) => diff --git a/src/Controls/src/Core/Label/Label.Mapper.cs b/src/Controls/src/Core/Label/Label.Mapper.cs index eeaeff7464a1..3f116231a103 100644 --- a/src/Controls/src/Core/Label/Label.Mapper.cs +++ b/src/Controls/src/Core/Label/Label.Mapper.cs @@ -61,7 +61,10 @@ static void MapTextTransform(ILabelHandler handler, Label label) => static void MapFormattedText(ILabelHandler handler, Label label) { if (label.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. return; + } MapText(handler, label); } @@ -167,7 +170,10 @@ static void MapTextColor(ILabelHandler handler, Label label, Action formattedString.ToNSAttributedString(fontManager, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform, LineBreakMode.WordWrap, defaultCharacterSpacing: 0d); + => formattedString.ToNSAttributedString(fontManager, LineBreakMode.WordWrap, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform); + + internal static NSAttributedString ToNSAttributedString( + this FormattedString formattedString, + IFontManager fontManager, + LineBreakMode defaultLineBreakMode, + double defaultLineHeight = -1, + TextAlignment defaultHorizontalAlignment = TextAlignment.Start, + Font? defaultFont = null, + Color? defaultColor = null, + TextTransform defaultTextTransform = TextTransform.Default) + => formattedString.ToNSAttributedString(fontManager, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform, defaultLineBreakMode, defaultCharacterSpacing: 0d); internal static NSAttributedString ToNSAttributedString( this FormattedString formattedString, @@ -82,7 +93,18 @@ public static NSAttributedString ToNSAttributedString( Font? defaultFont = null, Color? defaultColor = null, TextTransform defaultTextTransform = TextTransform.Default) - => span.ToNSAttributedString(fontManager, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform, LineBreakMode.WordWrap, defaultCharacterSpacing: 0d); + => span.ToNSAttributedString(fontManager, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform, defaultLineBreakMode: LineBreakMode.WordWrap); + + internal static NSAttributedString ToNSAttributedString( + this Span span, + IFontManager fontManager, + LineBreakMode defaultLineBreakMode, + double defaultLineHeight = -1, + TextAlignment defaultHorizontalAlignment = TextAlignment.Start, + Font? defaultFont = null, + Color? defaultColor = null, + TextTransform defaultTextTransform = TextTransform.Default) + => span.ToNSAttributedString(fontManager, defaultLineHeight, defaultHorizontalAlignment, defaultFont, defaultColor, defaultTextTransform, defaultLineBreakMode, defaultCharacterSpacing: 0d); internal static NSAttributedString ToNSAttributedString( this Span span, @@ -92,7 +114,7 @@ internal static NSAttributedString ToNSAttributedString( Font? defaultFont, Color? defaultColor, TextTransform defaultTextTransform, - LineBreakMode lineBreakMode, + LineBreakMode defaultLineBreakMode, double defaultCharacterSpacing = 0d) { var defaultFontSize = defaultFont?.Size ?? fontManager.DefaultFontSize; @@ -123,14 +145,13 @@ internal static NSAttributedString ToNSAttributedString( _ => UITextAlignment.Left }; - style.LineBreakMode = lineBreakMode switch + style.LineBreakMode = defaultLineBreakMode switch { LineBreakMode.NoWrap => UILineBreakMode.Clip, - LineBreakMode.WordWrap => UILineBreakMode.WordWrap, LineBreakMode.CharacterWrap => UILineBreakMode.CharacterWrap, LineBreakMode.HeadTruncation => UILineBreakMode.HeadTruncation, - LineBreakMode.TailTruncation => UILineBreakMode.TailTruncation, LineBreakMode.MiddleTruncation => UILineBreakMode.MiddleTruncation, + LineBreakMode.TailTruncation => UILineBreakMode.TailTruncation, _ => UILineBreakMode.WordWrap }; diff --git a/src/Controls/src/Core/SearchBar/SearchBar.Android.cs b/src/Controls/src/Core/SearchBar/SearchBar.Android.cs index 69b58ab1e216..ceecffdc069d 100644 --- a/src/Controls/src/Core/SearchBar/SearchBar.Android.cs +++ b/src/Controls/src/Core/SearchBar/SearchBar.Android.cs @@ -23,5 +23,17 @@ public static void MapText(SearchBarHandler2 handler, SearchBar searchBar) Platform.EditTextExtensions.UpdateText(handler.PlatformView.EditText, searchBar); } + + // Material3 specific overload for SearchBarHandler2 + internal static void MapTextTransform(SearchBarHandler2 handler, SearchBar searchBar) + { + if (searchBar.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, searchBar); + } } } diff --git a/src/Controls/src/Core/SearchBar/SearchBar.Mapper.cs b/src/Controls/src/Core/SearchBar/SearchBar.Mapper.cs index d05efd265ec8..d07705d9b029 100644 --- a/src/Controls/src/Core/SearchBar/SearchBar.Mapper.cs +++ b/src/Controls/src/Core/SearchBar/SearchBar.Mapper.cs @@ -27,16 +27,16 @@ static SearchBar() { // Material3 SearchBar handler mappings SearchBarHandler2.Mapper.ReplaceMapping(nameof(Text), MapText); - SearchBarHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + SearchBarHandler2.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); } else { SearchBarHandler.Mapper.ReplaceMapping(nameof(Text), MapText); - SearchBarHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + SearchBarHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); } #else SearchBarHandler.Mapper.ReplaceMapping(nameof(Text), MapText); - SearchBarHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapText); + SearchBarHandler.Mapper.ReplaceMapping(nameof(TextTransform), MapTextTransform); #endif #if IOS || ANDROID @@ -47,5 +47,16 @@ static SearchBar() SearchBarHandler.CommandMapper.PrependToMapping(nameof(ISearchBar.Focus), InputView.MapFocus); #endif } + + static void MapTextTransform(ISearchBarHandler handler, SearchBar searchBar) + { + if (searchBar.IsConnectingHandler()) + { + // If we're connecting the handler, we don't want to map the text multiple times. + return; + } + + MapText(handler, searchBar); + } } } diff --git a/src/Controls/src/Core/SearchBar/SearchBar.iOS.cs b/src/Controls/src/Core/SearchBar/SearchBar.iOS.cs index d140cae18130..dce3376bedf4 100644 --- a/src/Controls/src/Core/SearchBar/SearchBar.iOS.cs +++ b/src/Controls/src/Core/SearchBar/SearchBar.iOS.cs @@ -17,7 +17,13 @@ public static void MapSearchBarStyle(ISearchBarHandler handler, SearchBar search public static void MapText(ISearchBarHandler handler, SearchBar searchBar) { Platform.SearchBarExtensions.UpdateText(handler.PlatformView, searchBar); - SearchBarHandler.MapFormatting(handler, searchBar); + + // Any text update requires that we update any attributed string formatting. + // During handler connection these properties are applied by the normal mapper sweep after Text. + if (!handler.IsConnectingHandler()) + { + SearchBarHandler.MapFormatting(handler, searchBar); + } } internal static void MapUserInteraction(ISearchBarHandler handler, SearchBar searchBar) diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAlignmentWithCharacterSpacing_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAlignmentWithCharacterSpacing_VerifyVisualState.png index 833ca775a366..a5fbb8310252 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAlignmentWithCharacterSpacing_VerifyVisualState.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAlignmentWithCharacterSpacing_VerifyVisualState.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAndVerticalAlignment_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAndVerticalAlignment_VerifyVisualState.png index bea5c0c9f3df..13b78b3593c4 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAndVerticalAlignment_VerifyVisualState.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_HorizontalAndVerticalAlignment_VerifyVisualState.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_IsPasswordWithHorizontalAlignment_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_IsPasswordWithHorizontalAlignment_VerifyVisualState.png index 66a89847c7ce..e39a76abea31 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_IsPasswordWithHorizontalAlignment_VerifyVisualState.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_IsPasswordWithHorizontalAlignment_VerifyVisualState.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_TextWithHorizontalAlignment_VerifyVisualState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_TextWithHorizontalAlignment_VerifyVisualState.png index dd7834817299..548bd360975e 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_TextWithHorizontalAlignment_VerifyVisualState.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Entry_TextWithHorizontalAlignment_VerifyVisualState.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png index 61f931fd9827..7f52e4244cf7 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png index d8a5b3288460..55bc6c377136 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithTextAndFontSize.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithTextAndFontSize.png index a5b3a0f176d3..d5916b7e6019 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithTextAndFontSize.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/Material3Label_VerifyLabelWithTextAndFontSize.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png index f91c145b6ad2..532816cabe9d 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeHeadTruncation.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeMiddleTruncation.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeMiddleTruncation.png index 7331ddcf7eee..364591ddb4e7 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeMiddleTruncation.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeMiddleTruncation.png differ diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png index b65379f5e1d2..8d380c79e0e9 100644 Binary files a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyLabelWithFormattedTextWhenLineBreakModeTailTruncation.png differ diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/Button/ButtonControlPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/Button/ButtonControlPage.xaml index e2ee55b2a38e..eccbb39ee844 100644 --- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/Button/ButtonControlPage.xaml +++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/Button/ButtonControlPage.xaml @@ -55,7 +55,12 @@