gpt4 book ai didi

wpf - 用户控件上的焦点和 TabIndex

转载 作者:行者123 更新时间:2023-12-02 23:03:40 26 4
gpt4 key购买 nike

我有一个奇怪的行为:我有一个包含文本框和(简单)用户控件(文本框和按钮)的 MainWindow,但出于调试目的,我将其剥离为仅一个文本框。

当我使用文本框和用户控件而不设置 TabIndex 属性时,光标会按正确的顺序遍历控件(按照控件添加到窗口的顺序)

当我在设置 TabIndex 属性的情况下使用文本框和用户控件时,光标会以无效顺序逐步浏览控件(首先是所有用户控件,然后是所有文本框),当 TabIndex 设置为与其中的顺序相对应的值时也是如此。控件已添加

这是我的用户控件

<UserControl x:Class="SmallControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
>
<TextBox x:Name="txTEXT" Text="{Binding Text}" />
</UserControl>

以下Mainwindow xaml导致订单000000,111111,222222,333333,没关系

    <GroupBox Header="Small,Textbox,Small,TextBox without TabIndex">
<UniformGrid Columns="4">
<local:SmallControl Text="000000" />
<TextBox Text="111111" />
<local:SmallControl Text="222222" />
<TextBox Text="333333" />
</UniformGrid>
</GroupBox>

以下 Mainwindow xaml 导致订单 000000,222222,111111,333333,那不行

    <GroupBox Header="Small,Textbox,Small,TextBox with TabIndex">
<UniformGrid Columns="4">
<local:SmallControl TabIndex="0" Text="000000" />
<TextBox TabIndex="1" Text="111111" />
<local:SmallControl TabIndex="2" Text="222222" />
<TextBox TabIndex="3" Text="333333" />
</UniformGrid>
</GroupBox>

有没有一种方法可以使用 TabIndex 而不必被迫在 XAML 中以“正确”的顺序添加控件?

最佳答案

默认情况下,WPF 在同一选项卡级别读取所有控件,包括 UserControls 内部和外部的控件(除非另有指定)。由于 UserControl 内的控件没有指定 TabIndex,因此它们会在第一个 Tab 循环后切换到最后一个。

要更改此行为,我通常在 UserControl 定义上设置 IsTabStop="False",然后将内部控件 TabIndex 绑定(bind)到 UserControl 的 TabIndex

用户控件XAML

<TextBox x:Name="txTEXT" Text="{Binding Text}" 
TabIndex="{Binding Path=TabIndex, RelativeSource={RelativeSource
AncestorType={x:Type local:SearchView}}}"/>

使用XAML

<GroupBox Header="Small,Textbox,Small,TextBox with TabIndex">
<UniformGrid Columns="4">
<local:SmallControl TabIndex="0" Text="000000" IsTabStop="False" />
<TextBox TabIndex="1" Text="111111" />
<local:SmallControl TabIndex="2" Text="222222" IsTabStop="False" />
<TextBox TabIndex="3" Text="333333" />
</UniformGrid>
</GroupBox>

您还可以通过设置 KeyboardNavigation.TabNavigation 来正确进行 Tab 键切换。将 UserControl 上的属性附加到 Local 。我似乎记得有这方面的问题,但老实说我不记得细节了,所以它可能有用。

<UserControl x:Class="SmallControl" ...
KeyboardNavigation.TabNavigation="Local" />

关于wpf - 用户控件上的焦点和 TabIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com