【问题标题】:WPF TabIndex in a composite control复合控件中的 WPF TabIndex
【发布时间】:2016-06-17 00:46:33
【问题描述】:

我有一个简单的窗口,其中嵌入了一个简单的复合控件。

(主窗口)

<Window x:Class="TabOrder.Window1"
xmlns:local="clr-namespace:TabOrder"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">First</Label>
    <TextBox TabIndex="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Second</Label>
    <TextBox TabIndex="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>

    <local:MyControl Margin="0,60,0,0" VerticalAlignment="Top" HorizontalAlignment="Stretch" TabIndex="2"/>
</Grid>

(复合控制)

<UserControl x:Class="TabOrder.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
    <Label HorizontalAlignment="Left" VerticalAlignment="Top">Third</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,0,0,0"/>

    <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0">Fourth</Label>
    <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="80,30,0,0"/>
</Grid>

正如我在表单上所期望的那样,我得到了 4 个文本框...

  • 首先
  • 第二
  • 第三
  • 第四

但是当“第一”有焦点并且我点击标签时,焦点会切换到“第三”。 WPF 似乎将选项卡列表视为单个平面列表,而不是 MyControl 为 TabIndex 3 且文本框“Third”是其中的第一个选项卡式控件的树。

这是 WPF 中的错误还是有其他方法?复合控件用于多个窗口,甚至可以在一个窗口中多次使用。

【问题讨论】:

    标签: wpf composite-controls tabindex


    【解决方案1】:

    我知道这个回复已经很晚了……但是你试过了吗:

    <UserControl ... KeyboardNavigation.TabNavigation="Local">
    

    这样做将确保一旦您的 UserControl 获得焦点,您将只在 UserControl 中的 TabStop 中导航(而不用担心整个应用程序中的 TabIndex 值冲突)。在遍历 UserControl 的 TabStop 之后,TabNavigation 将恢复到它之外的 TabStop。

    http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardnavigationmode.aspx

    【讨论】:

    • 对我来说还不晚。谢谢。
    猜你喜欢
    • 2010-11-04
    • 2010-11-02
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2018-04-14
    相关资源
    最近更新 更多