2014-08-31 2 views
0

Я пытаюсь иметь SizeToContent = "WidthAndHeight" и WindowState = "Максимизировано" одновременно. Я попытался изменить состояние моего окна во время загрузки, а также в конструкторе MainWindow, но не повезло.windowState и SizeToContent не работают одновременно

<Window x:Name="MainWindowMy" x:Class="ManyTabControls.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="Pressure Vessel Design" WindowState="Maximized" SizeToContent="WidthAndHeight" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" Loaded="MainWindowMy_Loaded" > 
<Window.Resources> 

У меня есть TabControl с большим количеством вкладок, в конструкции зрителе, вкладки, стекающие в разные строки. И когда я изменяю ширину TabControl так, чтобы вкладки были в одной строке, они выходят за пределы MainWindow. И если я установил ширину Mainwindow, то MainWindow будет иметь постоянную ширину. Это означает, что если размер монитора становится меньше, то часть MainWindow, которая больше, чем экран, не будет отображаться. Надеюсь, я поняла.

+4

Как вы ожидаете, что 'Maximised' и' SizeToContent' будут работать вместе? Они противоречивы. Чего вы ожидаете? – dkozl

+0

И что происходит? «Не повезло» не является хорошим заявлением о проблеме. –

+0

Когда окно загружено, оно не увеличивается. Почему он не может иметь размер содержимого и максимизироваться при загрузке. Как вы можете видеть, оба атрибута сосуществуют! Как можно перенести приоритет на другой. – Bopy

ответ

0

Спасибо, Евгений, я понял. Я уже пытался изменить состояние своего MainWindow во время выполнения, но он не сработал (MainWindow не занимал весь экран).

Причина, по словам Юджина, заключается в том, что эти свойства конфликтуют друг с другом (SizeToContent получает приоритет), поэтому я должен отключить его, чтобы включить другой. Поэтому, чтобы решить эту проблему:

private void MainWindowMy_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.SizeToContent = System.Windows.SizeToContent.Manual; 
    this.WindowState = System.Windows.WindowState.Maximized; 
} 

Это не самый элегантный способ сделать это, но она служит цели сейчас. Однако, если кто-нибудь может придумать более элегантное решение, было бы весьма признательно.