Удалить вкладки из WPF TabControl во время выполнения в C#

Пример Добавить вкладки в WPF TabControl во время выполнения в C# показывает, как вы можете добавлять вкладки в элемент управления во время выполнения. Вы бы подумали, что удаление вкладок было бы проще, и это в некотором роде. Вы просто удаляете объекты TabItem из TabControl.

Самый очевидный способ сделать это - добавить новые элементы управления в элементы управления TabItem. Это означает, что вам также нужно добавить эти элементы управления при создании новой вкладки, поэтому, если вы хотите удалить ее позже.

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

Элемент TabItem включает в себя обработчик события Image.PreviewMouseDown. Чтобы закрыть вкладку, пользователь нажимает на элемент управления Image (кратко описанный), который находится внутри TabItem. Когда пользователь делает это, событие PreviewMouseDown туннелируется в дерево пользовательского интерфейса и попадает в этот обработчик событий (о чем я расскажу через минуту).

TabItem.Header содержит Grid, который содержит Label и Изображение. Label просто отображает текст заголовка вкладки. Изображение отображает X, который пользователь может щелкнуть, чтобы закрыть вкладку.

Содержимое элемента TabItem содержит только Label. Обычно вы, вероятно, кладете здесь контейнер, например сетку, а затем размещаете другие элементы управления внутри контейнера.

В следующем коде показан обработчик события Image.PreviewMouseDown.

Этот обработчик событий вызывается объектом TabItem, который его зарегистрировал. Код преобразует параметр sender (который является TabItem, который поднял событие) в TabItem, а затем удаляет его из TabControl .

Код заканчивается установкой e.Handled на true, чтобы событие больше не перемещалось через дерево пользовательского интерфейса.

Это поможет удалить вкладку. Теперь нам нужно изменить способ добавления предыдущего примера вкладки .

Следующий код выполняется, когда вы нажимаете кнопку «+» программы.

Этот код в основном просто создает элементы управления, необходимые для сборки вкладки, ее заголовка и его содержимого. Самая интересная часть - это то, где код дает новый TabItem новый обработчик событий, чтобы поймать присоединенное событие Image.PreviewMouseDownEvent. Код использует метод AddHandler элемента, чтобы добавить новый RoutedEventHandler. К сожалению, подпись для этого типа обработчика событий точно не соответствует сигнатуре ранее созданного обработчика событий. Второй параметр обработчика маршрутизируемого события имеет тип RoutedEventArgs, а второй параметр предыдущего обработчика имеет более специфический тип MouseButtonEventArgs.

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

Этот код просто преобразует второй параметр в более конкретный тип и затем вызывает ранее определенный TabItem_RemoveClicked обработчик событий.

Источник: http://csharphelper.com/blog/2016/04/remove-tabs-wpf-tabcontrol-runtime-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *