2014-10-09 344 views
0

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

既然你是在说tab控件,为什么不把它们包含在显示的XAML中呢? – stakx 2014-10-09 15:44:00

+1

题外话:作为一个用户,我很可能会变得非常恼火,因为在手动调整它的窗口大小之后,我立刻就开始注意窗口大小*本身。可以调整窗口大小,并让用户确定窗口大小;或使其不可调整大小,并让窗口选择。 – stakx 2014-10-09 15:46:49

回答

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的保存值。