我的Window
定义如下:
<Window x:Class="AutomatedSQLMigration.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="Height"
DataContext="{Binding MainPageViewModel, Source={StaticResource Locator}}">
<DockPanel Name="MasterDockPanel">
...
</DockPanel>
</Window>
我在选项卡控件中有许多选项卡,只要用户不更改窗口大小,窗口就会正确调整高度以适应所选选项卡的内容。一旦用户手动更改窗口大小,窗口将不会自行调整大小以适合所选选项卡的内容。
即使用户手动更改了尺寸,我该怎么做才能让窗口自动调整大小?
答案 0 :(得分:0)
据我所知,你需要在框外行为,所以我可以看到这些解决方案:
设置Window
的最小高度(如此<Window MinHeight="150" ...
),以便用户无法更改高度小于TabControl
的指定最小内容。我认为这是最简单可靠的解决方案。
使用这样的黑客:
XAML
<Window x:Class="AutoResizeProblem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded"
SizeToContent="Height">
<DockPanel Name="MasterDockPanel" Background="Aquamarine">
<TabControl SelectionChanged="TabControl_SelectionChanged">
<TabItem Header="Test1">
<TextBlock Name="Test1Content" Background="Red" Height="100">TEST1</TextBlock>
</TabItem>
<TabItem Header="Test2">
<TextBlock>TEST2</TextBlock>
</TabItem>
<TabItem Header="Test3">
<TextBlock>TEST3</TextBlock>
</TabItem>
</TabControl>
</DockPanel>
</Window>
Code-behind
public partial class MainWindow : Window
{
double _initWindowHeight = 0;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
_initWindowHeight = this.Height;
}
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (_initWindowHeight > 0)
this.Height = _initWindowHeight;
}
}
在这种情况下,您可以在 Window
事件中保存Loaded
的初始高度。然后,当您更改标签( SelectionChanged
事件)时,会为Window
分配保存的值。