Размер окна, когда SizeToContent не указан - PullRequest
1 голос
/ 17 сентября 2009

Когда используется следующий XAML, размер окна не 5000x5000, а небольшое окно, где кнопка обрезается.

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" >
    <Button Width="5000" Height="5000">XXX</Button>
</Window>

Из того, что я могу сказать, размер Я не указал атрибут SizeToContent, по умолчанию "Ручной", поэтому он будет использовать * размер окна определяется другими свойствами, включая Width, Height, MaxWidth MaxHeight, MinWidth и MinHeight. * Из обзора Windows WPF кажется, что эти другие свойства - FrameworkElement :: MinHeight / Width и FrameworkElement :: MaxHeight. Но так как значения по умолчанию для Mins равны 0, максимальные значения равны бесконечности, а Width / Height - Nan .... что происходит? Где WPF получает размер окна?

Будем благодарны за любые указатели в правильном направлении.

Ответы [ 4 ]

4 голосов
/ 01 октября 2009

Если ширина и высота не указаны, WPF использует 60% ширины основного экрана (где фактически отображаются окна) и 60% его высоты. Это делается единственным приложением, в котором все Windows в конечном итоге регистрируют себя.

1 голос
/ 30 сентября 2009

Я не могу найти в MSDN ничего, что явно указывало бы значения по умолчанию для размера, но описания свойств Top, Left и WindowStartupLocation говорят, что они по умолчанию соответствуют стандартным значениям по умолчанию Win32, если они не указаны. Я думаю, что разумно предположить, что свойства Height и Width сделали бы то же самое.

Если вы не хотите, чтобы это происходило для вашего окна, вы должны явно установить либо Width и Height, либо свойство SizeToContent элемента Window в зависимости от ваших требований. Явный размер, установленный для элемента Button, будет влиять только на Window, если Window.SizeToContent = True.

0 голосов
/ 25 сентября 2009

Я думаю, что информация, которую вы ищете, скрыта в документации для FrameworkElement.Width ( ссылка ).

В дополнение к допустимым значениям Double это свойство также может иметь значение Double.NaN. Вот как вы определяете поведение авторазмера. В XAML вы устанавливаете значение в строку «Авто» (без учета регистра), чтобы включить режим автоматического определения размера. Поведение авторазмера подразумевает, что элемент будет заполнять доступную ему ширину. Обратите внимание, однако, что определенные элементы управления часто предоставляют значения по умолчанию в своих стилях по умолчанию, которые отключают режим автоматического определения размера, если только он не был специально повторно включен.

Итак, из этого следует ожидать, что ширина / высота окна при отсутствии других установленных ограничений (таких как MaxWidth, MinWidth, Width и т. Д.) Определяется стилем по умолчанию окна.

Edit:

Похоже, скорее всего это происходит от функции, вызываемой самим классом Window, которая учитывает все ограничения плюс размер монитора.

0 голосов
/ 17 сентября 2009

Полагаю, ОС предоставила окну эти значения. Это может быть связано с тем, как ОС Windows запоминает размер любого окна до его последнего закрытия. *

Точно так же, как я полагаю, окна предоставили вашему окну высоту и ширину по умолчанию, когда ни одно из измерений не указано.

  • Вы можете попробовать это с помощью блокнота. Открой это. Измените его размер. Закрой его. Теперь снова откройте его. Хм ..
...