Использование TextBoxes Text после создания их в коде позади - PullRequest
0 голосов
/ 01 мая 2020

У меня есть страница WPF с оберткой, одна кнопка для создания текстовых полей в обертке с текстом в них и одна кнопка, чтобы получить текст, который был записан в текстовые поля. Ее часть xaml:

<StackPanel>
        <WrapPanel Orientation="Horizontal" x:Name="WP1"
                   Height="200"/>
        <Button Content="Insert" Click="Button_Click" Margin="10"/>
        <Button Content="Get_TextBoxes_Text" x:Name="GetTextBoxes_Txt_btn"
                Click="GetTextBoxes_Txt_btn_Click" Margin="10"/>
    </StackPanel>

Теперь, когда каждый раз, когда я нажимаю первую кнопку, он создает текстовое поле в обертке с текстом. Допустим, я нажал на кнопку 3 раза (но это может быть 1, 2 или 10 ...) на кнопке.

  private void Button_Click(object sender, RoutedEventArgs e)
    {
        TextBox t = new TextBox()
        {
            Text = "100",
            Padding = new Thickness(3),
            BorderBrush = Brushes.Black
        };
        WP1.Children.Add(t);
        // Let's imagine i've clicked 3 times on this button to create 3 textboxes. But the user will be able to click from 1 to 10 times, we don't know at this point.
    }

Теперь, когда я нажимаю на вторую кнопку, я хочу заключить в строка каждого текста текстового поля, которое мы создали, как:

 private void GetTextBoxes_Txt_btn_Click(object sender, RoutedEventArgs e)
    {
        // How to get into a string the content of the 3 textboxes like :
        string text = first_TextBox.Text + secondTextBox.Text + thirdTextBox.Text //????
    }

Но, конечно, это не работает, потому что текстовые поля, которые я создал, не имеют "настоящего" имени. Как я могу справиться с этим? Спасибо за помощь.

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете использовать VisualTreeHelper для итерации всех дочерних элементов вашего элемента управления. Для каждого TextBox вы можете получить и объединить текст, как в следующем примере:

string text = "";
int childNumber = VisualTreeHelper.GetChildrenCount(WP1);
for (int i = 0; i <= childNumber - 1; i++)
{
    DependencyObject child = (Visual)VisualTreeHelper.GetChild(WP1, i);
    if (child is TextBox textBox)
    {
        text += textBox.Text;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...