Как установить индекс табуляции для элементов дерева XAML? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть древовидное представление, в котором я динамически устанавливаю флажки в виде элементов дерева, используя код c #. Теперь я хочу пройтись по всем элементам дерева, когда я нажимаю кнопку вкладки. В настоящее время мой древовидный элемент становится сфокусированным, когда я нажимаю кнопку вкладки, но не индексирую любой из моих древовидных элементов. код xaml

<TreeView x:Name="resultTree" Grid.Column="2" Height="280" 
Margin="0,60,89,0" VerticalAlignment="Top" Grid.ColumnSpan="3" 
HorizontalAlignment="Right" Width="345" Grid.RowSpan="2" TabIndex="3" />

C # код:

TreeViewItem accountTree = new TreeViewItem();
accountTree.Focus();
accountTree.IsExpanded = true;
j = 4;
CheckBox currentAccountChBx = new System.Windows.Controls.CheckBox();
currentAccountChBx.Content = "A";
currentAccountChBx.Name = "accountChBx" + i;
currentAccountChBx.TabIndex = j;
currentAccountChBx.Focusable = true;
currentAccountChBx.IsTabStop = false;
j++;

Tab Index flow should be like this Есть ли способ сделать это? Благодаря.

1 Ответ

0 голосов
/ 08 мая 2019

Вы должны использовать рекурсию: для каждого узла итерируйте его дочерние элементы. Например, показать содержимое каждого узла в окне сообщения:

void ExecuteOnEachNode(TreeView tree, Action<TreeViewItem> func) // Executes 'func' on each item with it as parameter
{
    foreach (TreeViewItem item in tree.Items)
    {
        func(item);

        foreach (TreeViewItem subitem in item.Items)
        {
            ExecuteOnEachNode(item, func); // Trasvel over current item children
        }
    }
}

ExecuteOnEachNode(item => MessageBox.Show(item.Header.ToString()));

Затем вы должны установить вкладку indx для всех. Например,

int counter = 2;
ExecuteOnEachNode(item => item.TabIndex = counter++);
...