2014-10-09 2 views
0

У меня есть Window определяется следующим образом:AUTORESIZE MainWindow после пользователь изменяет размер окна

<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

Поскольку вы говорите об элементах управления вкладками, почему бы вам не включить их в XAML? – stakx

+1

Не по теме: Как пользователь, я бы, вероятно, стал действительно раздражать, чтобы посмотреть, как изменяется размер окна * сразу после того, как я вручную * изменил размер своего окна. Либо сделайте окно изменчивым, и пусть пользователь определит размер окна; или сделать его не изменяемым по размеру, и позволить выбрать окно. – stakx

ответ

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.

Смежные вопросы