Поиск элементов управления по имени в WPF

Автор: Махеш Чанд

Метод FindName в классе FrameworkElement позволяет искать элементы по свойству Name. Класс FrameworkElement — родительский класс всех элементов управления в WPF.

У нас есть окно с элементами Button, TextBox и ListBox.

<Window x:Class="FindControlByNameSample.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="305" Width="508">
    <Grid Name="LayoutRoot">
        <Button Content="Поиск по имени" Height="35" HorizontalAlignment="Left" Margin="18,23,0,0"
                Name="FindNameButton" VerticalAlignment="Top" Width="144" Click="FindNameButton_Click" />
        <TextBox Height="39" HorizontalAlignment="Left" Margin="202,21,0,0" Name="TextBox1"
                 VerticalAlignment="Top" Width="184" />
        <ListBox Height="146" HorizontalAlignment="Left" Margin="18,98,0,0" Name="listBox1"
                 VerticalAlignment="Top" Width="179" />
    </Grid>
</Window>

Следующий фрагмент — это обработчик нажатия кнопки, который вызывает метод FindName в Grid для поиска элемента по имени. Код берет имя из TextBox, проверяет, является ли он объектом TextBox, ListBox или Button, после чего задает его свойства соответствующим образом.

private void FindNameButton_Click(object sender, RoutedEventArgs e)

{

    object item = LayoutRoot.FindName(TextBox1.Text);

    if (item is TextBox)

    {

        TextBox txt = (TextBox)item;

        txt.Text = "Нашелся!";

        txt.Background = new SolidColorBrush(Colors.LightYellow);

    }

    else if (item is ListBox)

    {

        ListBox lst = (ListBox)item;

        lst.Items.Add("Нашелся!");

    }

    else if (item is Button)

    {

        Button btn = (Button)item;

        btn.Content = "Нашелся!";

        btn.Background = new SolidColorBrush(Colors.LightSeaGreen);

    }

}

Если ввести в поле "TextBox1" и нажать кнопку, результат будет похож на рис. 1.

Рис. 1.