Ordem de guias WPF com controles personalizados?

Eu tenho uma página WPF que contém vários controles prontos para uso com a ordem das guias definida.

Eu tenho um controle personalizado (NumericSpinner) que contém: borda / grade / caixa de texto / 2 botões de repetição (para cima / para baixo).

Duas questões:

1) quando estou na caixa de texto do controle seletor personalizado, não consigo separá-lo para outros controles na página. No entanto, depois de clicar em uma das setas para cima / para baixo, sou capaz de navegar por outros controles.

2) Não consigo tabular a caixa de texto do controle personalizado em ordem. Somente depois de ter percorrido todos os controles, o cursor fica na caixa de texto (e não é possível separar).

Contexto:

<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" />

Parte do controle personalizado:

 <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>

O controle personalizado consiste no arquivo xaml e code-behind.

A página xaml pai, contendo todos os controles, é carregada dinamicamente e não contém code-behind.

No construtor para o controle personalizado, defini o seguinte como teste:

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

Na quarta vez que tabulo, na verdade, coloco o cursor no campo de texto, mas não consigo separá-lo.

Com isso em mente, o primeiro passo seria criar um parâmetro de controle que eu possa passar um número de ordem de tabulação que seria definido no código atrás do controle.

Eu criei uma propriedade 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));

E no xaml, quando tento definir CustomTabIndex = "3", recebo o erro:

A propriedade 'CustomTabIndex' não foi encontrada no tipo 'NumericSpinner'.

Alguma assistência seria apreciada.

questionAnswers(5)

yourAnswerToTheQuestion