gpt4 book ai didi

wpf - 未遵循指定的 Tab 键顺序?

转载 作者:行者123 更新时间:2023-12-01 17:00:49 24 4
gpt4 key购买 nike

为什么我的 XAML 不遵循我指定的 TabOrder?

我目前有:

<DockPanel>
<Grid DockPanel.Dock="Top">
<UserControl TabIndex="0">
<StackPanel Orientation="Horizontal">
<ComboBox />
<TextBox Text="Search Text" />
<Button Content="Search" />
</StackPanel>
</UserControl>
<ComboBox TabIndex="1" />
<Separator />
<TextBox TabIndex="3" Text="Save" />
<TextBox TabIndex="4" Text="Cancel" />
</Grid>
<Grid>
<ContentControl TabIndex="2" />
<Popup />
</Grid>
</DockPanel>

enter image description here

我的 TabOrder 应该消失

  • 搜索组合框
  • 搜索文本
  • 搜索按钮
  • 数据库组合框
  • 内容控制
  • 保存按钮
  • 取消按钮

但相反

  • 搜索组合框
  • 搜索文本
  • 搜索按钮
  • 内容控制
  • 数据库组合框
  • 保存按钮
  • 取消按钮

我的 TabOrder 有什么问题吗?

编辑

我找到了this SO answer建议创建 UserControl.IsTabStop="False",并将其子控件的 TabIndex 绑定(bind)到 UserControl.TabIndex,这部分有效。

我的 TabOrder 现在是

  • 搜索组合框
  • 搜索文本
  • 搜索按钮
  • 数据库组合框
  • 保存按钮
  • 取消按钮
  • 内容控制

最佳答案

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

解决方法是将内部控件的 TabIndex 绑定(bind)到 UserControl 的 TabIndex

<DockPanel Margin="10" KeyboardNavigation.TabNavigation="Cycle">
<Grid DockPanel.Dock="Top"
local:GridProperties.ColumnCount="6"
local:GridProperties.StarColumns="0">

<TextBlock Text="Header" FontSize="20" FontWeight="Bold" />
<ContentControl Grid.Column="1" TabIndex="0" IsTabStop="False" Content="{Binding SearchViewModel}" />

<ComboBox Grid.Column="2" Margin="5" Width="100" />

<Separator Grid.Column="3" Style="{StaticResource VerticalSeparatorStyle}" />

<Button Grid.Column="4" TabIndex="3" Content="Save" Width="75" Margin="5" />
<Button Grid.Column="5" TabIndex="4" Content="Cancel" Width="75" Margin="5" />
</Grid>

<Line HorizontalAlignment="Stretch" X2="1" Stretch="Fill" Stroke="Black" StrokeThickness="1" Margin="0,5" DockPanel.Dock="Top" />

<Grid x:Name="ShellContentRoot">

<!-- Current Page -->
<ContentControl TabIndex="2" Content="{Binding CurrentAccount}" IsTabStop="False" />

<!-- Search Results -->
<local:PopupPanel local:PopupPanel.PopupParent="{Binding ElementName=ShellContentRoot}" />
</Grid>
</DockPanel>

我的 SearchView 唯一特别之处是控件全部设置完毕

TabIndex="{Binding Path=TabIndex, RelativeSource={RelativeSource 
AncestorType={x:Type local:SearchView}}}"

Tab 顺序为:

  • 用户控件搜索组合框
  • 用户控件搜索文本
  • 用户控件搜索按钮
  • 数据库组合框
  • 内容控制
  • 保存按钮
  • 取消按钮

关于wpf - 未遵循指定的 Tab 键顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715055/

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