用户调整窗口大小后AutoResize MainWindow

时间:2014-10-09 14:59:27

标签: c# wpf autoresize

我的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>

我在选项卡控件中有许多选项卡,只要用户不更改窗口大小,窗口就会正确调整高度以适应所选选项卡的内容。一旦用户手动更改窗口大小,窗口将不会自行调整大小以适合所选选项卡的内容。

即使用户手动更改了尺寸,我该怎么做才能让窗口自动调整大小?

1 个答案:

答案 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分配保存的值。