【问题标题】:AutoResize MainWindow after user resizes window用户调整窗口大小后 AutoResize MainWindow
【发布时间】:2014-12-04 13:52:19
【问题描述】:

我有一个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>

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

即使在用户手动更改大小后,如何让窗口自动调整大小?

【问题讨论】:

  • 既然您说的是选项卡控件,为什么不将它们包含在显示的 XAML 中?
  • 题外话:作为一个用户,在我遇到手动的麻烦之后,我可能会非常恼火地看到窗口调整本身 > 改变它的窗口大小。要么使窗口可调整大小,并让用户确定窗口大小;或使其不可调整大小,并让窗口选择。

标签: c# wpf autoresize


【解决方案1】:

据我所知,您需要开箱即用的行为,因此我可以看到以下解决方案:

  • Window设置最小Height(像这样&lt;Window MinHeight="150" ...),为了用户不能改变Height小于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 的保存值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多