- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
<Grid x:Name="LayoutRoot">
<Button x:Name="BtnNavigateTabIndex" Content="NavigateTabIndex" Margin="152,200,0,190" HorizontalAlignment="Left" Width="120"/>
<TextBox x:Name="TextBox_1" HorizontalAlignment="Left" Height="48" Margin="120,64,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="80"/>
<TextBox x:Name="TextBox_2" HorizontalAlignment="Left" Height="48" Margin="120,128,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="80"/>
<PasswordBox x:Name="PasswordBox_1" HorizontalAlignment="Left" Height="48" Margin="224,64,0,0" VerticalAlignment="Top" Width="72"/>
<PasswordBox x:Name="PasswordBox_2" HorizontalAlignment="Left" Height="48" Margin="224,128,0,0" VerticalAlignment="Top" Width="72"/>
</Grid>
设计将如下所示。
如果我单击按钮 (NavigateTabIndex),光标应导航到 TextBox 或 PasswordBox。对于 EX:如果您单击键盘中的 Tab 键,光标将导航。这就是我需要的场景。
最佳答案
一般来说,WPF 聚焦有很多陷阱......甚至还有一些错误。
您需要了解逻辑焦点和键盘焦点之间的区别。
使用 FocusScopes 时,您可以使用:
MoveFocus
带有 TraversalRequest(FocusNavigationDirection.Next)
将逻辑焦点更改为范围中的下一项。
使用 FocusScopes 的替代方法是跟踪 GotFocus/LostFocus 事件并自行管理。
更多链接:
好的,这里有一些示例代码供您使用。我冒昧地稍微重新设计了您对 Grid 的使用,以遵循更传统的布局实践。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication5
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void BtnNavigateTabIndex_Click(object sender, RoutedEventArgs e)
{
UIElement focussedelement = FocusManager.GetFocusedElement(grid1) as UIElement;
bool bmovedfocus = focussedelement.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
if (bmovedfocus)
{
UIElement withfocusnow = FocusManager.GetFocusedElement(grid1) as UIElement;
if (withfocusnow == focussedelement) // focus didn't change! because end of focus group..need to put it back to the start
{
TextBox_1.Focus();
}
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
TextBox_1.Focus();
}
}
}
<Window x:Class="WpfApplication5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication5"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<StackPanel>
<Grid x:Name="grid1" FocusManager.IsFocusScope="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Margin="10" Grid.Row="0" Grid.Column="0" x:Name="TextBox_1" HorizontalAlignment="Left" Height="48" TextWrapping="Wrap" VerticalAlignment="Top" Width="80"/>
<PasswordBox Margin="10" Grid.Row="0" Grid.Column="1" x:Name="PasswordBox_1" HorizontalAlignment="Left" Height="48" VerticalAlignment="Top" Width="72"/>
<TextBox Margin="10" Grid.Row="1" Grid.Column="0" x:Name="TextBox_2" HorizontalAlignment="Left" Height="48" TextWrapping="Wrap" VerticalAlignment="Top" Width="80"/>
<PasswordBox Margin="10" Grid.Row="1" Grid.Column="1" x:Name="PasswordBox_2" HorizontalAlignment="Left" Height="48" VerticalAlignment="Top" Width="72"/>
<Button FocusManager.IsFocusScope="True" Padding="20" HorizontalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="2" x:Name="BtnNavigateTabIndex" Content="NavigateTabIndex" Width="120" Click="BtnNavigateTabIndex_Click" />
</Grid>
</StackPanel>
</Window>
关于c# - 如何通过单击 wpf 中的按钮使用 TabIndex 导航光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12157905/
如果每个元素都有自己的tabindex,如下所示: Link Option A Option B Option C Hello world Button 现在,我向 bu
例如,这是一个脚本: 所以,当用户按下 tab 并浏览六个文本框,到达最后一个然后按下 tab 时,它会转到第一个评论上方的内容,对吗?那么,如何让它再次从 tabindex="1"
$(document).on("keyup", function(e) { var code = e.which; var currentTabIndex = document.act
当提交按钮获得焦点时按 Tab 键,焦点应返回到 tabindex="1"。这是 HTML: 这是 JQuery: $("input").keydown(function (e) {
我们正在运行一个名为 Axe 的工具检查 HTML 页面的有效性和 508 合规性/可访问性。 此错误作为违规出现: Elements should not have tabindex greater
我有几个 LinearLayouts 包含在它们各自的 ScrollView 中,而 ScrollView 又包含在 ViewFlipper 中。奇怪的是,在某些布局中,一旦获得焦点,它就会自动从顶部
我有一个简单的窗口,其中嵌入了一个简单的复合控件。 (主窗口) First Second (复合控制) Third F
我刚刚把 two textbox(tabindex=0,2), one autocompletebox(tabindex=1) and one button(tabindex=3) 但在运行时自动完
WPF中的TabIndex和KeyboardNavigation.TabIndex有什么区别?什么时候使用每个? 最佳答案 @akjoshi在他的回答中包含了有关TabIndex的非常重要的信息,
我在一个文本框旁边有 2 个按钮,在这 2 个按钮后面还有另一个文本框。第一个文本框的 tabindex 为 1000,第一个按钮为 1001,第二个按钮为 1002。第二个文本框的 tabindex
如何在表单字段上设置 html 属性“tabindex”? 我的模板目前看起来像.. Email Address {{ form.email }} 最佳答案 选项卡索引是布局的一项功能
我有一个奇怪的行为:我有一个包含文本框和(简单)用户控件(文本框和按钮)的 MainWindow,但出于调试目的,我将其剥离为仅一个文本框。 当我使用文本框和用户控件而不设置 TabIndex 属性时
在我的 gwt 应用程序中,在某些屏幕上,我创建了一个带有输入表单的对话框。我希望能够使用 tabindex 属性,但只能在该对话框中使用。 (即:仅将该对话框的第一个字段循环到最后一个字段)现在,如
我正在使用 jQuery 自定义我自己的保管箱,但想知道如何将 tabindex 应用于它。 我尝试使用隐藏的选择焦点/模糊事件,但似乎不起作用。 我还尝试将 tabindex 属性应用于我的自定义保
我有一个带有字段的表单,其中一些字段可以隐藏。为了获得正确的可访问性,我使用 jQuery 添加 tabindex,仅添加到当前可见的元素: $(':input:visible').each(func
我有一个使用 jQuery UI 的对话框,上面有两个按钮。 对话框内部有一些表单元素,我可以使用 TAB 键进行切换。现在无法使用 TAB 键访问"is"按钮。接缝处没有 TabIndex。 我怎样
我在我的应用程序中使用 Angular JS。我在某些可点击元素上使用 tabindex 来支持应用程序的键盘用户。 我对 tabindex 的理解是,假设元素 A 的 tabindex = 1,元素
如果用户跳转到特定的选项卡索引,是否可以添加类?我想在用户选项卡到达特定索引时添加类,并在跳转到另一个索引时删除类?谢谢! 这里我想在选项卡聚焦于 tabindex=3 时添加事件类: Hello
如何为数字文本框设置标签索引..我的代码是.. $("#max_award_amount").kendoNumericTextBox({ min:0, max: 99999999.99
鉴于 浏览器有一个页面加载了带有 tabindex=1 的现有字段(称为 ef), 通过书签插入两个新字段(nf1 和 nf2) 第一次(不正确的行为)当鼠标单击 nf1 并随后单击一个选项卡时焦点的
我是一名优秀的程序员,十分优秀!