2011-10-31 16 views
5

tengo un control de usuario como esto:¿Establece el orden de tabulación en wpf cuando se usa desde UserControls?

<UserControl x:Class="MySample.customtextbox" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="20" d:DesignWidth="300"> 
<Grid> 
    <TextBox x:Name="Ytextbox" Background="Yellow"/> 
</Grid> 

Y utilizo este control en una ventana y establecer órdenes de tabulación ... pero cuando se carga mi ventana, el orden de tabulación no está funcionando correctamente !!! mi código de ventana:

<Window xmlns:my="clr-namespace:MySample" x:Class="MySample.window" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="window" Height="300" Width="600"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition></RowDefinition> 

    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
     <ColumnDefinition></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <my:customtextbox Grid.Column="1" KeyboardNavigation.TabIndex="0" InfoText="{Binding msg}" Height="20"/> 
    <TextBox Grid.Column="3" KeyboardNavigation.TabIndex="1" Text="{Binding msg}" Height="20" Background="Gold"></TextBox> 
    <my:customtextbox Grid.Row="1" Grid.Column="1" KeyboardNavigation.TabIndex="2" InfoText="{Binding msg}" Height="20"/> 
    <TextBox Grid.Column="3" Grid.Row="1" Text="{Binding msg}" Height="20" KeyboardNavigation.TabIndex="3" Background="Gold"></TextBox> 

</Grid> 

Respuesta

7

Por defecto, WPF lee todos los controles, dentro y fuera de su control de usuario, en el mismo nivel pestaña. Debido a que los controles dentro de su UserControl no tienen un TabIndex especificado, se les asigna una pestaña para que duren más allá del primer ciclo de pestañas.

La solución que suelen utilizar es establecer la IsTabStop="False" en mi UserControl (para evitar la tabulación en el propio control de usuario), y luego dentro de la UserControl utilizar un TemplateBinding para unirse a los controles internos TabIndex a del UserControl TabIndex

<TextBox x:Name="Ytextbox" Background="Yellow" 
     TabIndex="{Binding Path=TabIndex, 
     RelativeSource={RelativeSource AncestorType={x:Type local:customtextbox}}}"/> 

y

<my:customtextbox IsTabStop="False" KeyboardNavigation.TabIndex="0" 
        Grid.Column="1" InfoText="{Binding msg}" Height="20"/> 
+0

tanque usted Rachel..its funcionan perfectamente –

+0

funciona bien para mí! – psulek

+0

O puede usar 'KeyboardNavigation.TabNavigation =" Local "' en '' cuando su usercontrol personalizado tiene más controles que tienen su propio orden de tabulación específico válido solo con usercontrol – psulek

Cuestiones relacionadas