kla*_*sel 6 wpf user-controls focus
我有一个奇怪的行为:我有一个包含文本框和(简单)用户控件(文本框和按钮)的MainWindow,但我将其剥离为仅用于调试目的的文本框.
当我使用textboxes和usercontrols WITHOUT设置TabIndex属性时,光标按正确的顺序逐步执行控件(按照控件添加到窗口的顺序)
当我使用textboxes和usercontrols WITH设置TabIndex属性时,光标以无效顺序(首先是所有用户控件,然后是所有文本框)逐步执行控件,当TabIndex设置为与控件的顺序相对应的值时也是如此添加
这是我的usercontrol
<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>
Run Code Online (Sandbox Code Playgroud)
以下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>
Run Code Online (Sandbox Code Playgroud)
以下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>
Run Code Online (Sandbox Code Playgroud)
有没有办法使用TabIndex而不必强制在xaml中以"正确"的顺序添加控件?
关心克劳斯
Rac*_*hel 28
默认情况下,WPF在同一选项卡级别读取UserControls内部和外部的所有控件(除非另有说明).由于UserControl中的控件没有指定TabIndex,因此它们会在第一个制表符循环后标记为最后一个.
要改变这种行为,我通常设置IsTabStop="False"我的UserControl定义,然后将内部控件TabIndex绑定到UserControl的TabIndex
UserControl XAML
<TextBox x:Name="txTEXT" Text="{Binding Text}"
TabIndex="{Binding Path=TabIndex, RelativeSource={RelativeSource
AncestorType={x:Type local:SearchView}}}"/>
Run Code Online (Sandbox Code Playgroud)
用法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>
Run Code Online (Sandbox Code Playgroud)
您也可以通过将UserControl上的KeyboardNavigation.TabNavigation附加属性设置为Local来正确选项.我似乎记得有这个问题,但老实说我不记得细节,所以它可能有用.
<UserControl x:Class="SmallControl" ...
KeyboardNavigation.TabNavigation="Local" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15841 次 |
| 最近记录: |