Я наконец нашел решение, может быть, не самое лучшее, но оно работает отлично, и не нашел другого решения.Невозможно выполнить эту работу при инициализации окна, так как содержимое еще не было загружено (MyWindow.Show ()), поэтому мне пришлось использовать событие SizeChanged в TabControl.
В моем ViewModel Iустановить два параметра TabControlWidth
и TabControlHeight
.
private double tabControlWidth = 0;
public double TabControlWidth
{
get { return tabControlWidth; }
set
{
if (this.tabControlWidth != value)
{
tabControlWidth = value;
this.NotifyPropertyChanged("TabControlWidth");
}
}
}
private double tabControlHeight = 0;
public double TabControlHeight
{
get { return tabControlHeight; }
set
{
if (this.tabControlHeight != value)
{
tabControlHeight = value;
this.NotifyPropertyChanged("TabControlHeight");
}
}
}
в моем файле MyWindow.xaml.cs Я добавляю свойство bool, чтобы проверять, когда я проверял все TabItems (очевидно, это свойство имеет значение false, когдаинициализация окна):
bool allTabItemsChecked { get; set; }
Наконец, мне нужно добавить в мой TabControl две вещи:
Привязать ширину и высоту к моим свойствам в ViewModel.
Добавить событие SizeChanged
SizeChanged = "TabControlSizeChanged" MinHeight = "{Binding TabControlHeight}" MinWidth = "{Binding TabControlWidth}"
(извините, мне не удается отобразить последнюю строку в виде кода? Часто происходит после того, как я использую "-" или "*")
Наконец я выполняю функцию SizeChanged следующим образом:
private void TabControlSizeChanged(object sender, SizeChangedEventArgs e)
{
if(this.allTabItemsChecked==false)
{
int index = tabControl.SelectedIndex;
List<TabItem> list = new List<TabItem>();
list.AddRange(tabControl.Items.OfType<TabItem>());
if (index < list.Count()-1)
{
tabControl.SelectedIndex = index + 1;
}
else
{
this.allTabItemsChecked = true;
tabControl.SelectedIndex = 0;
}
contexte.TabControlWidth = Math.Max(tabControl.ActualWidth, contexte.TabControlWidth);
contexte.TabControlHeight = Math.Max(tabControl.ActualHeight, contexte.TabControlHeight);
}
}
Когда мы отображаем окно, событие автоматическиLy запущен.Затем я изменю TabControl.SelectedIndex на следующий TabItem и обновлю размеры TabControl на большее.Когда я достиг последнего индекса, я просто установил SelectedIndex на 0, а затем установил для allTabItemsChecked значение true.