【问题标题】:WPF - How to set a Tab Order for specific items inside an ItemscontrolWPF - 如何为 Itemscontrol 中的特定项目设置 Tab 键顺序
【发布时间】:2019-07-02 10:36:49
【问题描述】:

我有一个动态创建文本框的 ItemsControl。当我浏览时,我只希望它专注于一个特定的文本框。

在切换时,焦点应该跳转到每个 Coin_Qty_TxtBx

我一直在尝试使用 KeyboardNavigation 选项的不同选项,但无法使其正常工作。我还尝试手动将文本框上的 TabIndex 绑定到整数列表。

<ItemsControl x:Name="Coins_LB" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" KeyboardNavigation.TabNavigation="Continue">

                   <ItemsControl.ItemContainerStyle>
                                <Style>
                                    <Setter Property="KeyboardNavigation.IsTabStop" Value="False"/>
                                </Style>
                            </ItemsControl.ItemContainerStyle>

                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel IsItemsHost="True" Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>

                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Grid.Column="0">
                                        <Button x:Name="CoinPicture_Btn" BorderThickness="0" Background="white" Style="{StaticResource AddRemoveSave_Style}" VerticalAlignment="Top" Height="60" Width="60" HorizontalAlignment="Center" Margin="0,0,0,3" Click="CashPicture_Btn_Click" IsTabStop="False">
                                            <Image Source="{Binding PicturePath}" RenderOptions.BitmapScalingMode="Fant" Margin="-15, -20, -15, -30" />
                                        </Button>
                                        <Label x:Name="Coin_Name_Lbl" Content="{Binding Name}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Margin="0,1,0,0" VerticalAlignment="Top" Width="72" FontWeight="Bold" Grid.Column="0"/>
                                        <TextBox x:Name="Coin_Qty_TxtBx" Text="{Binding Count, Mode=TwoWay}" Margin="5,2" IsTabStop="True" HorizontalContentAlignment="Center" LostFocus="Cash_Qty_LostFocus" GotKeyboardFocus="Cash_Qty_GotFocus"/>
                                        <TextBox x:Name="Coin_ItemTotal_TxtBx" Text="{Binding Total, StringFormat='c'}" Margin="5,2" HorizontalContentAlignment="Center"/>
                                    </StackPanel>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

现在它会关注第一个 Coin_Qty_TxtBx,但在从那里切换后,焦点完全离开了 ItemsControl。

【问题讨论】:

  • 你试过this吗?
  • 我看了看,但似乎过分了。我假设有一种更简单的方法可以直接在 XML 中完成。

标签: wpf itemscontrol tabindex


【解决方案1】:

您只需要在这些控件上设置IsTabStop="False",您不想使用选项卡。

例如:

<TextBox x:Name="Coin_ItemTotal_TxtBx" IsTabStop="False"... />

【讨论】:

  • 不幸的是它并没有解决问题。该选项卡不会在项目控件中的项目之间循环。
  • @Mersad:奇怪,当我尝试时,我可以跳过控件中的所有“Coin_Qty_TxtBx”。您是否在LostFocusGetKeyboardFocus 中做了一些可能干扰标准行为的事情
  • 谢谢!我正在导致问题的 LostFocus 函数中进行刷新调用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2012-04-23
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多