如何避免 UWP 中 TextBox 的 Focusing 丢失?

How to avoid loss Focusing of TextBox in UWP?

我尝试了什么?

<Grid >
    <Canvas>
        <Canvas x:Name="Gesture" Width="500" Height="500" Background="Gray" AllowFocusOnInteraction="False">
            
        </Canvas>
        <StackPanel x:Name="SidePanel" Canvas.Left="500" Background="LightCyan" Width="100" Height="500">
            <TextBox x:Name="NameBox" Text="Prem" Width="100" Height="35"/>
            <Button Content="But" AllowFocusOnInteraction="False"/>
        </StackPanel>
    </Canvas>
</Grid>

我需要达到什么目标?

当文本框获得焦点时,如果我点击按钮它不会失去焦点。因为,我设置了按钮 属性 - AllowFocusOnInteraction="False".

我需要实现相同的效果,当我在灰色区域内单击时(手势 Canvas)。我设置了 Canvas 属性-AllowFocusOnInteraction="False"。但是不行。

当我在手势内部单击时,文本框应该聚焦 canvas。怎么做?为什么 AllowFocusOnInteraction 不适用于 Gesture Canvas?

您可以在 LostFocus 事件中设置焦点状态,以确保您的 TextBox 不会失去焦点。

您可以处理 TextBox 的 LostFocus 事件和 StackPanel 的 Tapped 事件。然后当点击StackPanel时,在LostFocus事件

中改变flag值并设置焦点状态
 <StackPanel x:Name="SidePanel" Canvas.Left="500" Background="LightCyan" Width="100" Height="500" Tapped="SidePanel_Tapped">
            <TextBox x:Name="NameBox" Text="Prem" Width="100" Height="35" LostFocus="NameBox_LostFocus"/>
            <Button Content="But" AllowFocusOnInteraction="False"/>
        </StackPanel>

代码隐藏

private bool setFocus = true;

 private void NameBox_LostFocus(object sender, RoutedEventArgs e)
    {
        if (setFocus == true)
        {
            NameBox.Focus(FocusState.Programmatic);
        }
    }

    private void SidePanel_Tapped(object sender, TappedRoutedEventArgs e)
    {
        setFocus = true;
    }