View Issue Details

IDProjectCategoryView StatusLast Update
0003587NoesisGUIC++ SDKpublic2025-05-20 19:03
Reporternikobarli Assigned Tosfernandez  
PrioritynormalSeveritymajor 
Status resolvedResolutionfixed 
Product Version3.2.4 
Target Version3.2.8Fixed in Version3.2.8 
Summary0003587: Focus is not moved appropriately using Tab key
Description

For example the following XAML behaves weirdly and doesn't match WPF behavior

When the focus initially set to "TabIndex: none A" and we click Tab repeatedly, the focus just moves between "TabIndex: none A" and "TabIndex: none B" button.

When the focus initially set to "TabIndex: 0" and we click Tab repeatedly, the focus moves to "TabIndex: 1" "TabIndex: 2" "TabIndex: 3" "TabIndex: none A" "TabIndex: none B", but then it just loops between "TabIndex: none A" and "TabIndex: none B"

<StackPanel Width="400" >
<Button Content="TabIndex: none A"/>
<Button Content="TabIndex: none B"/>
<Button TabIndex="0" Content="TabIndex: 0"/>
<Button TabIndex="1" Content="TabIndex: 1"/>
<Button TabIndex="2" Content="TabIndex: 2" IsEnabled="True"/>
<Button TabIndex="3" Content="TabIndex: 3"/>
</StackPanel>

Steps To Reproduce

Please apply the attached patch to the Noesis sample code.

Attached Files
NoesisGUI-win-x84_64_TestFocus.patch (7,472 bytes)   
Index: Native/Src/Packages/Samples/Buttons/Data/MainWindow.xaml
===================================================================
--- Native/Src/Packages/Samples/Buttons/Data/MainWindow.xaml	(revision 174740)
+++ Native/Src/Packages/Samples/Buttons/Data/MainWindow.xaml	(working copy)
@@ -8,108 +8,13 @@
         Title="NoesisGUI - Buttons"
         d:DesignWidth="1280" d:DesignHeight="720">
 
-    <Window.Resources>
-        <Storyboard x:Key="Intro">
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="StartButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="1">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <BackEase EasingMode="EaseOut" Amplitude="0.5"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="StartButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <CircleEase EasingMode="EaseOut"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="SettingsButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="1">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <BackEase EasingMode="EaseOut" Amplitude="0.5"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="SettingsButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="0">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <CircleEase EasingMode="EaseOut"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="ExitButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="1">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <BackEase EasingMode="EaseOut" Amplitude="0.5"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="ExitButton">
-                <EasingDoubleKeyFrame KeyTime="0" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="-200"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0">
-                    <EasingDoubleKeyFrame.EasingFunction>
-                        <CircleEase EasingMode="EaseOut"/>
-                    </EasingDoubleKeyFrame.EasingFunction>
-                </EasingDoubleKeyFrame>
-            </DoubleAnimationUsingKeyFrames>
-        </Storyboard>
-    </Window.Resources>
-    <Window.Triggers>
-        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
-            <BeginStoryboard Storyboard="{StaticResource Intro}"/>
-        </EventTrigger>
-    </Window.Triggers>
-    <Grid x:Name="LayoutRoot" Background="{StaticResource NoesisLogoBg}">
-        <Grid.RowDefinitions>
-            <RowDefinition Height="80*"/>
-            <RowDefinition Height="800*"/>
-            <RowDefinition Height="120*"/>
-        </Grid.RowDefinitions>
-        <Grid.ColumnDefinitions>
-            <ColumnDefinition Width="40*"/>
-            <ColumnDefinition Width="900*"/>
-            <ColumnDefinition Width="60*"/>
-        </Grid.ColumnDefinitions>
-        <Grid Grid.Column="1" Grid.Row="1">
-            <Grid.RowDefinitions>
-                <RowDefinition Height="200*"/>
-                <RowDefinition Height="800*"/>
-            </Grid.RowDefinitions>
-            <Viewbox x:Name="Logo" Stretch="Uniform">
-                <StackPanel Orientation="Horizontal">
-                    <Path Data="{StaticResource NoesisLogoGeometry}" Fill="{StaticResource NoesisLogoBlueBg}" Stretch="Uniform"/>
-                    <Path Data="{StaticResource NoesisTextGeometry}" Fill="White" Stretch="Uniform" Margin="40,0,0,0" VerticalAlignment="Center"/>
-                    <Path Data="{StaticResource NoesisGuiTextGeometry}" Fill="{StaticResource NoesisLogoBlueBg}" Stretch="Uniform" Margin="40,0,0,0" VerticalAlignment="Center"/>
-                </StackPanel>
-            </Viewbox>
-            <Viewbox Grid.Row="1" Stretch="Uniform">
-                <Grid Height="460" Width="768">
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="100*"/>
-                        <RowDefinition Height="100*"/>
-                        <RowDefinition Height="30*"/>
-                        <RowDefinition Height="100*"/>
-                        <RowDefinition Height="30*"/>
-                        <RowDefinition Height="100*"/>
-                    </Grid.RowDefinitions>
-                    <Button x:Name="StartButton" Grid.Row="1" Content="START" Command="{Binding StartCommand}"/>
-                    <Button x:Name="SettingsButton" Grid.Row="3" Content="SETTINGS" Command="{Binding SettingsCommand}"/>
-                    <Button x:Name="ExitButton" Grid.Row="5" Content="EXIT" Command="{Binding ExitCommand}"/>
-                </Grid>
-            </Viewbox>
-        </Grid>
-    </Grid>
+  <StackPanel Width="400" >
+    <Button Content="TabIndex: none A"/>
+    <Button Content="TabIndex: none B"/>
+    <Button TabIndex="0" Content="TabIndex: 0"/>
+    <Button TabIndex="1" Content="TabIndex: 1"/>
+    <Button TabIndex="2" Content="TabIndex: 2" IsEnabled="True"/>
+    <Button TabIndex="3" Content="TabIndex: 3"/>
+  </StackPanel>
 
 </Window>
\ No newline at end of file
PlatformWindows

Activities

Issue History

Date Modified Username Field Change
2024-08-02 12:33 nikobarli New Issue
2024-08-02 12:33 nikobarli File Added: NoesisGUI-win-x84_64_TestFocus.patch
2024-08-05 14:18 jsantos Assigned To => sfernandez
2024-08-05 14:18 jsantos Status new => assigned
2024-08-05 14:18 jsantos Target Version => 3.2.5
2024-10-24 16:43 sfernandez Target Version 3.2.5 => 3.2.6
2024-11-22 18:18 jsantos Target Version 3.2.6 => 3.2.7
2025-01-20 17:43 jsantos Target Version 3.2.7 => 3.2.8
2025-05-20 19:03 sfernandez Status assigned => resolved
2025-05-20 19:03 sfernandez Resolution open => fixed
2025-05-20 19:03 sfernandez Fixed in Version => 3.2.8