Поиск элементов управления по имени в WPF
Автор: Махеш Чанд
Метод FindName в классе FrameworkElement позволяет искать элементы по свойству Name. Класс FrameworkElement — родительский класс всех элементов управления в WPF.
У нас есть окно с элементами Button, TextBox и ListBox.
<Window x:Class="FindControlByNameSample.Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://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.