Как получить и удалить элемент управления в позиции из сетки
Я добавляю элемент управления во время выполнения в Grid
используя следующий код:
void AddControl(UserControl oControl)
{
grid.Children.Add(oControl);
oControl.SetValue(Grid.RowProperty, 1);
oControl.SetValue(Grid.ColumnProperty, 0);
}
Я хочу удалить элемент управления в той же позиции (строка = 1, столбец = 0). Я не сохраняю ссылку на элемент управления, добавленный ранее. Как получить и удалить элемент управления в позиции (строка = 1 и столбец = 0) из Grid
?
1 ответ
У меня есть два пользовательских элемента управления, которые имеют некоторые функции в них. В главном окне у меня есть две кнопки. По нажатию первой я устанавливаю UserControl1 во второй строке, а по нажатию второй я устанавливаю UserControl2 в той же позиции
То, что вам нужно для достижения этой цели, TabControl
:
<TabControl>
<TabItem Header="Tab 1">
<Grid Background="Gray">
<TextBlock Text="Here goes UserControl 1"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</TabItem>
<TabItem Header="Tab 2">
<Grid Background="Gray">
<TextBlock Text="Here goes UserControl 2"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</TabItem>
</TabControl>
Результат:
Почему добавление элементов управления в коде не очень хорошо?
Потому что это создает хаос ремонтопригодности. Элементы пользовательского интерфейса должны быть определены в XAML. Вот для чего XAML. Создание элементов пользовательского интерфейса в коде позади - это не только больше кода, оно подвержено ошибкам и полностью устраняет разделение пользовательского интерфейса и кода, которое допускает XAML.
Что если мне нужно динамически создать пользовательский интерфейс?
Тогда вы должны использовать DataTemplates
определено в XAML. Опционально используя DataTriggers
изменить состояние элементов пользовательского интерфейса на основе определенных свойств в Model / ViewModel
Идея WPF о "динамичности" действительно сильно отличается от традиционных структур пользовательского интерфейса.