¿Orden de tabulación WPF con controles personalizados?

Tengo una página WPF que contiene varios controles listos para usar con el orden de tabulación establecido.

Tengo un control personalizado (NumericSpinner) que contiene: borde / cuadrícula / cuadro de texto / 2 botones de repetición (arriba / abajo).

Dos cuestiones:

1) cuando estoy en el cuadro de texto para el control del selector personalizado, no puedo pasarlo a otros controles en la página. Sin embargo, después de hacer clic en una de las flechas arriba / abajo, puedo pasar a otros controles.

2) No puedo ingresar en el cuadro de texto del control personalizado en orden. Solo después de haber tabulado todos los controles, el cursor aterriza en el cuadro de texto (y no se puede eliminar).

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

Porción del control 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>

El control personalizado consiste en el archivo xaml y el código subyacente.

La página xaml principal, que contiene todos los controles, se carga dinámicamente y no contiene código subyacente.

En el constructor para el control personalizado, configuré lo siguiente como prueba:

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

La cuarta vez que tabulo, en realidad pongo el cursor en el campo de texto, sin embargo, no puedo tabularlo.

Con esto en mente, el primer paso sería crear un parámetro de control al que pueda pasar un número de orden de tabulación que se establecería en el código del control detrás.

Creé una propiedad 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));

Y en el xaml, cuando intento configurar CustomTabIndex = "3", recibo el error:

La propiedad 'CustomTabIndex' no se encontró en el tipo 'NumericSpinner'.

Se agradecería alguna ayuda.

Respuestas a la pregunta(5)

Su respuesta a la pregunta