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项目存在问题.
赏金仍然存在,如果有人可以提供帮助,将会获得奖励.谢谢
也许它专注于堆栈面板本身?
在页面本身中有弹出对话框或文本字符串来显示始终关注的内容。这样您就可以看到堆栈布局是否变得集中。
另一种可能性是,如果您点击关闭,它会将焦点返回到堆栈布局上的第一个元素(它所看到的点击的元素)。
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |