Задача
У меня есть пользовательский элемент управления вкладками, использующий вкладки в форме Chrome, которые привязываются к ViewModel. Из-за формы края немного перекрываются. У меня есть функция, которая устанавливает ZIndex tabItem на TabControl_SelectionChanged
, которая отлично работает для выбора вкладок и перетаскивания вкладок, однако когда я добавляю или закрываю вкладку с помощью команды ретрансляции, я получаю необычные результаты. У кого-нибудь есть идеи?
Вид по умолчанию:
Удаление вкладок:
Добавление 2 или более вкладок в ряд:
Добавление более 1 вкладки за раз не приведет к сбросу zindex других недавно добавленных вкладок, поэтому они переходят за вкладку справа, и закрытие вкладок неправильно отображает ZIndex SelectedTab, который заменяет его, и показывает вверх за вкладкой справа.
Код для установки ZIndex
private void PrimaryTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
TabControl tabControl = sender as TabControl;
ItemContainerGenerator icg = tabControl.ItemContainerGenerator;
if (icg.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
foreach (object o in tabControl.Items)
{
UIElement tabItem = icg.ContainerFromItem(o) as UIElement;
Panel.SetZIndex(tabItem, (o == tabControl.SelectedItem ? 100 :
90 - tabControl.Items.IndexOf(o)));
}
}
}
}
Используя точки останова, я вижу, что он правильно устанавливает ZIndex на то, что мне нужно, однако макет не отображает изменения. Я знаю, что некоторые изменения вступили в силу, потому что если бы ни одно из них не работало, тогда края вкладок были бы перевернуты (правые вкладки были бы нарисованы поверх левых). Нажатие на вкладку правильно установит zindex всех вкладок (включая ту, которая должна быть нарисована сверху), а перетаскивание их для изменения их порядка также правильно отображает (что удаляет и повторно вставляет элемент вкладки). Единственное отличие, которое я могу себе представить, это то, что я использую шаблон проектирования MVVM, а кнопки на вкладках «Добавить / закрыть» являются командами реле.
Кто-нибудь знает, почему это происходит и как я могу это исправить ??
p.s. Я попытался установить ZIndex в моей ViewModel и привязать его, однако то же самое происходит при добавлении / удалении вкладок с помощью команды relay.