Stackpanel中的用户控件失去焦点

Sei*_*ige 6 c# focus autofocus xamarin uwp

我正在创建一个XML Form Reader.每种控件类型都是用户控件.但是,当用户点击不是聚焦控件(即TextBlock)的表单上的某个位置时,表单会将焦点跳转到页面中的第一个可聚焦控件.(即TextBox)

这会将页面滚动到顶部(通常),使用户远离他们正在处理的内容.

我在焦点事件周围尝试了很多不同的事情,但是如何解决这个问题却遇到了障碍.

处理这个问题的最佳方法是什么?任何提示或技巧将不胜感激.

谢谢

编辑(更多信息)

"MASTER"页面有一个 StackPanel

<StackPanel x:Name="pnlFormMain" ScrollViewer.BringIntoViewOnFocusChange="False"/>
Run Code Online (Sandbox Code Playgroud)

对于xml表单中的每个控件,UserControl将添加到stackpanel.

    <UserControl.Resources>
    <Storyboard x:Name="Show">
        <DoubleAnimation Duration="0:0:0.6" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="_WidgetMaster" d:IsOptimized="True"/>
    </Storyboard>
    <Storyboard x:Name="Hide">
        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="_WidgetMaster" d:IsOptimized="True"/>
    </Storyboard>
</UserControl.Resources>

<Grid x:Name="grdInput" ScrollViewer.BringIntoViewOnFocusChange="False">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>


    <Grid Grid.Column="0" Grid.Row="0" ScrollViewer.BringIntoViewOnFocusChange="False">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
        </Grid.ColumnDefinitions>
<!-- label -->
        <TextBlock x:Name="lblLabel" Text="Label" Grid.Column="0" VerticalAlignment="Center" Margin="3,6,5,5" TextWrapping="Wrap" />

        <!-- HINT -->
        <Ellipse x:Name="ellHint" Height="25" Width="25" Grid.Column="1" StrokeThickness="2" Stroke="LightBlue" Margin="5,0,5,0" Tapped="Hint_Tapped"  VerticalAlignment="Center">
            <Ellipse.Fill>
                <ImageBrush ImageSource="ms-appx:///XForms/Assets/information.png" />
            </Ellipse.Fill>
        </Ellipse>
    </Grid>
    <Frame x:Name="control" Grid.Column="1" Grid.Row="0" />
    <TextBlock x:Name="lblConstraintMessage" Grid.Row="2" Grid.ColumnSpan="99" FontSize="10" VerticalAlignment="Center" 
               HorizontalAlignment="Right" Margin="0,0,5,0" Visibility="Collapsed" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

UserControl几乎所有控件都使用相同的方法.而对于控制输入的是第二个UserControl是进入Frame底部附近.

(例如)

<Grid x:Name="grdInput">        
    <TextBox x:Name="txtInput" Text="" Grid.Row="0" Grid.Column="1" Margin="15,0,0,0" LostFocus="txtInput_LostFocus" KeyDown="txtInput_KeyDown" TextAlignment="Right" />

    <Border x:Name="brdrValuePlaceholder" Background="Transparent" BorderThickness="0,0,0,1" BorderBrush="{ThemeResource TextControlBorderBrush}" HorizontalAlignment="Stretch" 
            Height="{ThemeResource TextControlThemeMinHeight}" Visibility="Collapsed">
        <TextBlock x:Name="lblInput" Text="" Grid.Row="0" Grid.Column="1" Margin="0,0,5,0" Tapped="lblInput_Tapped" TextAlignment="Right" HorizontalAlignment="Stretch"/>
    </Border>        
</Grid>
Run Code Online (Sandbox Code Playgroud)

LostFocus那里的事件只是在数据库中设置一个值

母版页上的其他控件是a Popup和a ProgressRing 以及标题栏.

编辑2

我试图尽我所能制作StackPanel不可聚焦的东西,并存储以前专注的控件,但可以让它们像希望的那样工作.

我把源代码放在GitHub上,我是GitHub的新手,所以如果我需要做更多的事情,请告诉我.代码有点旧,但有同样的问题.解决方案中还有一个Android和iOS应用程序,但只有UWP项目存在问题.

赏金仍然存在,如果有人可以提供帮助,将会获得奖励.谢谢

Sli*_*och 1

也许它专注于堆栈面板本身?

在页面本身中有弹出对话框或文本字符串来显示始终关注的内容。这样您就可以看到堆栈布局是否变得集中。

另一种可能性是,如果您点击关闭,它会将焦点返回到堆栈布局上的第一个元素(它所看到的点击的元素)。