2011-10-31 6 views
5

मैं इस तरह एक उपयोगकर्ता नियंत्रण है:उपयोगकर्ता नियंत्रण से उपयोग करते समय wpf में टैब ऑर्डर सेट करना?

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

और मैं एक विंडो में इस पर नियंत्रण और टैब आदेश सेट का उपयोग करें ... लेकिन जब मेरी खिड़की भरी हुई है, टैब क्रम सही ढंग से काम नहीं कर रहा है !!! अपनी खिड़की कोड:

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

उत्तर

7

डिफ़ॉल्ट रूप से, WPF एक ही टैब स्तर पर सभी नियंत्रण पढ़ता है, अंदर और बाहर अपने UserControl,। चूंकि आपके UserControl के अंदर के नियंत्रण में कोई टैबइंडेक्स निर्दिष्ट नहीं है, इसलिए पहले टैब चक्र के बाद उन्हें टैबबैड मिल जाता है।

वैकल्पिक हल मैं आमतौर पर उपयोग करने पर IsTabStop="False" स्थापित करने के लिए है मेरी UserControl (UserControl खुद पर टैब को रोकने के लिए), और फिर UserControl अंदर एक TemplateBinding का उपयोग UserControl के TabIndex

<TextBox x:Name="Ytextbox" Background="Yellow" 
     TabIndex="{Binding Path=TabIndex, 
     RelativeSource={RelativeSource AncestorType={x:Type local:customtextbox}}}"/> 
के लिए आंतरिक नियंत्रण करने के लिए बाध्य करने के लिए TabIndex

और

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

टैंक आप Rachel..its पूरी तरह से काम –

+0

मेरे लिए अच्छी तरह से काम करता है! – psulek

+0

या आप 'keyboardNavigation.TabNavigation =" स्थानीय "' 'my: usercontrol> 'पर उपयोग कर सकते हैं जब आपके कस्टम उपयोगकर्ता नियंत्रण में अधिक नियंत्रण होते हैं जिनके पास अपना स्वयं का विशिष्ट टैब ऑर्डर केवल उपयोगकर्ता नियंत्रण के साथ मान्य होता है – psulek

संबंधित मुद्दे