Итак, мое окончательное решение заключается в следующем:

я есть страница WPF, которая содержит несколько встроенных элементов управления с установленным порядком вкладок.

У меня есть пользовательский элемент управления (NumericSpinner), который содержит: границы / сетки / текстовое поле / 2 кнопки повтора (вверх / вниз).

Два вопроса:

1) когда я нахожусь в текстовом поле для пользовательского элемента управления селектором, я не могу перейти из него в другие элементы управления на странице. Однако после нажатия на одну из стрелок вверх / вниз я могу перейти к другим элементам управления.

2) Я не могу перейти в текстовое поле пользовательского элемента управления по порядку. Только после того, как я прокрутил все элементы управления, курсор попадает в текстовое поле (и не может выйти из него).

Контекст:

<ComboBox Margin="97,315,21,0" Name="txtdweldatcdu" Style="{StaticResource fieldComboBoxStyle}" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" VerticalAlignment="Top" TabIndex="10" />
    <WpfControls:NumericSpinner Margin="97,338,21,0" Name="txtdweldatpctcomplete" HorizontalAlignment="Left" VerticalAlignment="Top" AllowNegativeValues="True" MaxValue="100" TabIndex="11" />
    <ComboBox Margin="97,363,21,0" Name="txtdweldatclass" Style="{StaticResource fieldComboBoxStyle}" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" VerticalAlignment="Top" TabIndex="12" />

Часть пользовательского контроля:

 <Border BorderThickness="1" BorderBrush="Gray" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="20" Width="117">
        <Grid Margin="0">
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="98"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <TextBox Name="valueText" 
                     BorderThickness="0" 
                     Grid.RowSpan="2"
                     Style="{StaticResource spinnerTextBoxStyle}"
                     PreviewKeyDown="valueText_PreviewKeyDown"
                     PreviewTextInput="valueText_PreviewTextInput"
                     TextChanged="valueText_TextChanged"
                     IsReadOnly="{Binding ElementName=Spinner, Path=IsReadOnly}"
                     Text="{Binding ElementName=Spinner, Path=Value, Mode=TwoWay}"
                     KeyboardNavigation.IsTabStop="True"
                     AcceptsTab="True"/>
            <RepeatButton Name="upButton" Style="{StaticResource spinnerRepeatButtonStyle}" Click="upButton_Click"  Grid.Column="1" Grid.Row="0" Height="10" Width="18" VerticalAlignment="Top" HorizontalAlignment="Right" HorizontalContentAlignment="Center">
                <Polygon  HorizontalAlignment="Center" Points="3,2 2,3 4,3"  Fill="Black"  Stretch="Uniform"  Stroke="Black"  StrokeThickness="0" />
            </RepeatButton>
            <RepeatButton Name="downButton" Style="{StaticResource spinnerRepeatButtonStyle}" Click="downButton_Click"  Grid.Column="1" Grid.Row="1" Height="10" Width="18" VerticalAlignment="Top" HorizontalAlignment="Right" HorizontalContentAlignment="Center">
                <Polygon  HorizontalAlignment="Center" Points="2,2 4,2 3,3"  Fill="Black"  Stretch="Uniform"  Stroke="Black"  StrokeThickness="0" />
            </RepeatButton>
        </Grid>
    </Border>

Пользовательский элемент управления состоит из файла xaml и code-behind.

Родительская страница xaml, содержащая все элементы управления, загружается динамически и не содержит кода.

В конструкторе для пользовательского элемента управления я установил следующее в качестве теста:

    valueText.TabIndex = 3;
    this.TabIndex = 3;

В четвертый раз, когда я нажимаю, я на самом деле помещаю курсор в текстовое поле, однако я не могу выйти из него.

Имея это в виду, первым шагом будет создание параметра элемента управления, который я могу передать порядковый номер вкладки, который будет установлен в коде элемента управления.

Я создал свойство CustomTabIndex:

/// <summary>
/// Custom tab index property
/// </summary>
public int CustomTabIndex
{
    get { return (int)GetValue(CustomTabIndexProperty); }
    set { SetValue(CustomTabIndexProperty, value); }
}

public static readonly DependencyProperty CustomTabIndexProperty = 
    DependencyProperty.Register("CustomTabIndex", typeof(int), typeof(NumericSpinner));

И в xaml, когда я пытаюсь установить CustomTabIndex = "3", я получаю ошибку:

Свойство 'CustomTabIndex' не найдено в типе 'NumericSpinner'.

Некоторая помощь будет оценена.

Ответы на вопрос(5)

Ваш ответ на вопрос