2011-08-11 8 views
6

तो मैं मूल रूप से इस ListView है और मैं टैब दबाएं और मेरे TreeViewItems के माध्यम से पुनरावृति (अधिमानतः केवल मेरे बक्सें) हैंTextVoxes के साथ TreeViewItems के रूप में ListView के माध्यम से कैसे टैब करें?

<ListView> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="number" /> 
      <GridViewColumn Header="Selector"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding SelectorName}"/> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

परिदृश्य है कि मैं देख रहा हूँ पहली बार पूरे के लिए टैब दबाने के बाद है पहले TreeViewItem का चयन किया जाता है और टैब को फिर से दबाकर पहला टेक्स्टबॉक्स चुना जाता है। अंततः तीसरा टैब ट्री व्यू से अगले नियंत्रण में बाहर हो जाता है हालांकि अधिक टेक्स्टबॉक्स हैं जिन्हें मैं अगले नियंत्रण में "टैबिंग" से पहले पकड़ना चाहता हूं। thankx

संपादित करें: प्रश्न का जवाब यहां गया था: How to TAB through TextBoxes in a ListView

उत्तर

2

हो सकता है कि मैं कुछ याद आ रही है, लेकिन मैं यह करने के लिए किसी भी सरल विधि नहीं मिल सकता है, यहाँ आप क्या कर सकते हैं की एक रूपरेखा होगा:

<ListView.InputBindings> 
    <KeyBinding Key="Tab" Command="{Binding GoToNextItem}" 
      CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" /> 
    <KeyBinding Modifiers="Shift" Key="Tab" Command="{Binding GoToPreviousItem}" 
      CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ListView}}" /> 
</ListView.InputBindings> 
<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <EventSetter Event="Selected" Handler="ItemSelected" /> 
    </Style> 
</ListView.ItemContainerStyle> 
<ListView.View> 
    <GridView> 
     <GridViewColumn Header="number" /> 
     <GridViewColumn Header="Selector"> 
      <GridViewColumn.CellTemplate> 
       <DataTemplate> 
        <TextBox Name="_tb" Text="{Binding SelectorName}"/> 
       </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
</ListView.View> 

चीजें मैं यहाँ क्या किया: आग में

  • अवहेलना टैब व्यवहार एक और आइटम का चयन करने आदेशों
  • चयनित ईवेंट पर ईवेंट हैंडलर जोड़ें पाठ बॉक्स ध्यान केंद्रित करने की
  • नाम पाठ बॉक्स तो यह पाया जा सकता है और ध्यान केंद्रित

कोड:

private readonly ICommand _GoToNextItem = new Command((p) => 
    { 
     var lv = p as ListView; 
     if (lv.SelectedIndex == -1 || lv.SelectedIndex == lv.Items.Count - 1) 
     { 
      lv.SelectedIndex = 0; 
     } 
     else 
     { 
      lv.SelectedIndex++; 
     } 
    }); 
public ICommand GoToNextItem { get { return _GoToNextItem; } } 

private readonly ICommand _GoToPreviousItem = new Command((p) => 
{ 
    var lv = p as ListView; 
    if (lv.SelectedIndex <= 0) 
    { 
     lv.SelectedIndex = lv.Items.Count - 1; 
    } 
    else 
    { 
     lv.SelectedIndex--; 
    } 
}); 
public ICommand GoToPreviousItem { get { return _GoToPreviousItem; } } 
private void ItemSelected(object sender, RoutedEventArgs e) 
{ 
    var item = sender as ListBoxItem; 
    (FindNamedChild(item, "_tb") as TextBox).Focus(); 
} 

public static object FindNamedChild(DependencyObject container, string name) 
{ 
    if (container is FrameworkElement) 
    { 
     if ((container as FrameworkElement).Name == name) return container; 
    } 
    var ccount = VisualTreeHelper.GetChildrenCount(container); 
    for (int i = 0; i < ccount; i++) 
    { 
     var child = VisualTreeHelper.GetChild(container, i); 
     var target = FindNamedChild(child, name); 
     if (target != null) 
     { 
      return target; 
     } 
    } 
    return null; 
} 

यह बहुत अधूरा है, किसी भी भाग का उपयोग अपने जोखिम पर यह। (भी इस में चयन लाए बिना अलग क्या कर सकते ध्यान केंद्रित कर मुझे लगता है कि)

(Command वर्ग है जो एक लैम्ब्डा जो इंटरफेस के Execute विधि में निष्पादित किया जाता है लेता है ICommand का सिर्फ एक सामान्य कार्यान्वयन है)

+0

धन्यवाद एचबी। मैं वास्तव में इसका उपयोग नहीं कर रहा था क्योंकि यह बहुत परेशान था जब आपके पास बहुत सारे टेक्स्टबॉक्स थे, जो आप सूची दृश्य से बाहर नहीं होंगे, हालांकि आप चाहते थे। और मुझे नहीं पता था कि SHIFT + TAB फिर से TreeviewItem का चयन कर सकता है और फिर आप ऊपर और नीचे तीर के साथ पुनरावृत्त कर सकते हैं और अभी भी अगले नियंत्रण में TreeView से बाहर निकलने के लिए टैब दबाए जाने का विकल्प है। –

+0

@ मोहम्मद चेरी: हाँ, टैब-फंसे होने के नाते बहुत सुविधाजनक नहीं है। मुझे उम्मीद है कि यह अभी भी आपके लिए कुछ था। –

0

सेट IsTabStop = GridViewColumn पर और सेल खाका पर "गलत"। इसे अब टैब चेंज पर डेटा टेम्पलेट के अंदर टेक्स्टबॉक्स का चयन करना चाहिए।

इस प्रयास करें:

<ListView DataContext="List" IsTabStop="False" > 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Name" /> 
       <GridViewColumn Header="Selector"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate > 
          <TextBox Text="{Binding Name}" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 
+0

नहीं है मान्य XAML पर एक नज़र डालें। क्या आपका मतलब था? –

+0

यह नहीं करेगा, कॉलम ऐसी संपत्ति का समर्थन नहीं करते हैं और फोकस अभी भी अगले आइटम पर जाने के बजाय पूरे नियंत्रण को छोड़ देता है। –

4
+0

यह वही है जो मैंने जाहिर तौर पर भाग में खो दिया है, अब यदि आप चयन पर टेक्स्टबॉक्स पर ध्यान केंद्रित करते हैं तो यह सही है। –

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