WPF TabStop / TabIndex in ItemsControl

后端 未结 1 1972
误落风尘
误落风尘 2020-12-11 13:31

I\'m dynamically adding WPF ComboBox-es and I want to be able to select the added ComboBoxes with the \'TAB\' key. (Dynamically generate Ta

1条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-11 14:22

    Here is a small example. I did this in Silverlight, so I guess you will have to modify it to work in WPF. It is not complete, but it is a starting point. You might want to use the Tag property on your controls to identify which of them need tab index fixing.

    XAML:

    
        
    
            
                
                    
                        
                            
                                
                                    
                                    
                                    
                                
    
                                
                                    
                                
    
                                
                                
                                
                                    
                                        
                                    
                                
    
                            
                        
                    
                
                
            
        
    
    

    And C#:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Controls.Primitives;
    
    namespace SilverlightApplication6
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
    
                this.DataContext = new List() { 1, 2, 3, 4, 5 };
    
    
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                var controls = new List();
                GetChildrenOfSpecificType(this, ref controls, false);
    
                var index = 1;
                controls.ForEach(control =>
                    {
                        if (control is ComboBox || control is TextBox)
                        {
                            control.TabIndex = index;
                            index++;
                        }
                    });
            }
    
            private static void GetChildrenOfSpecificType(DependencyObject parent, ref List resultList, bool getSingle) where T : class
            {
                if (parent == null)
                    return;
                else
                {
                    int cnt = VisualTreeHelper.GetChildrenCount(parent);
    
                    if (cnt > 0)
                    {
                        for (int i = 0; i < cnt; i++)
                        {
                            var d = VisualTreeHelper.GetChild(parent, i);
                            if (d is T)
                            {
                                resultList.Add(d as T);
                                if (getSingle)
                                    return;
                            }
    
                            GetChildrenOfSpecificType(d, ref resultList, getSingle);
                        }
                    }
    
                }
            }
        }
    }
    

    0 讨论(0)
提交回复
热议问题