1
0
Эх сурвалжийг харах

Track TabIndex value in NumericUpDown (#19348)

* Track TabIndex value in NumericUpDown

* Use template

* Add TabNavigationProperty.OverrideDefaultValue
Tim Miller 2 сар өмнө
parent
commit
e75f06d63f

+ 2 - 0
src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs

@@ -379,6 +379,7 @@ namespace Avalonia.Controls
 
             FocusableProperty.OverrideDefaultValue<NumericUpDown>(true);
             IsTabStopProperty.OverrideDefaultValue<NumericUpDown>(false);
+            KeyboardNavigation.TabNavigationProperty.OverrideDefaultValue<NumericUpDown>(KeyboardNavigationMode.Local);
         }
 
         /// <inheritdoc />
@@ -408,6 +409,7 @@ namespace Avalonia.Controls
             if (TextBox != null)
             {
                 TextBox.Text = Text;
+                TextBox[!TabIndexProperty] = this[!TabIndexProperty];
                 TextBox.PointerPressed += TextBoxOnPointerPressed;
                 _textBoxTextChangedSubscription = TextBox.GetObservable(TextBox.TextProperty).Subscribe(txt => TextBoxOnTextChanged());
             }

+ 17 - 0
tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs

@@ -152,5 +152,22 @@ namespace Avalonia.Controls.UnitTests
                     }.RegisterInNameScope(scope);
             });
         }
+
+        [Fact]
+        public void TabIndex_Should_Be_Synchronized_With_Inner_TextBox()
+        {
+            RunTest((control, textbox) =>
+            {
+                // Set TabIndex on NumericUpDown
+                control.TabIndex = 5;
+                
+                // The inner TextBox should inherit the same TabIndex
+                Assert.Equal(5, textbox.TabIndex);
+                
+                // Change TabIndex and verify it gets synchronized
+                control.TabIndex = 10;
+                Assert.Equal(10, textbox.TabIndex);
+            });
+        }
     }
 }