Почему окно во время выполнения больше? - PullRequest
12 голосов
/ 28 января 2011

У меня установлено окно размером 340 x 146 px, размер не изменяется.

В конструкторе размер окна правильный.Но когда я запускаю приложение, оно становится больше.enter image description here

Редактировать: Кроме того, макет Canvas.

Классическая тема:

enter image description here

Редактировать2:

После запуска snoop (спасибо Заку) выясняется, что фактические размеры - это то, что я указал.Но клиентская область больше, чем в Visual Studio.

Теперь я понимаю, что размер клиента растягивается, когда размер окна фиксируется до определенных размеров.Однако я думаю, что это делает макет Canvas в окне непригодным для использования.

Edit3:

<Window x:Class="TI.Presentation.Views.AutentizationWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Authentication" Height="146" Width="340" ResizeMode="NoResize" Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}" >
    <Canvas>
        <Label Canvas.Left="12" Canvas.Top="12" FontSize="15" Width="217">Enter authentication code here:</Label>
        <TextBox Canvas.Left="12" Canvas.Top="38" Height="23" Name="code" Width="294" FontSize="14" />
        <Button Canvas.Top="67" Content="OK" Height="28" Width="100" Canvas.Left="206" FontSize="14" IsDefault="True" Click="OKClick" />
    </Canvas>
</Window>

Ответы [ 4 ]

6 голосов
/ 28 января 2011

Я собираюсь ответить на этот вопрос сам после осмотра.

ActualWith и ActualHeight окна равны ширине и высоте, заданным в конструкторе.

Что меняется, это клиентская область,Размеры клиента будут равны размерам окна минус граница темы.Это, однако, нарушает дизайн Canvas, поскольку его абсолютно позиционированные размеры и размеры холста изменяются в зависимости от темы.

Способ работы Canvas.Задать размеры на Canvas, удалить размеры в окне и установить SizeToContent для окна соответственно.Таким образом, размеры каверн остаются неизменными, а размер окна изменяется в зависимости от того, как выглядит граница темы.

1 голос
/ 28 января 2011

Есть ли в окне значения DesignHeight и DesignWidth?См. WPF UserControl Design Time Size .

Редактировать: Моя следующая мысль будет попробовать использовать Snoop , чтобы увидеть во время выполнения, что именно отличается,Это размер, отступы, поля или что-то еще?

1 голос
/ 28 января 2011

Просто потому, что размер, который вы указали, не учитывает границы, которые будут взяты из текущей темы операционной системы ... Если вы устанавливаете 200x200, вы получаете это полное пространство ... вы бы не хотели, чтобы его уменьшали до коробки 190x190 из-за границы 5px с обеих сторон. и это также изменится на текущую тему в операционной системе, например Aero, Classic и т. д.

0 голосов
/ 28 января 2011

Я, вероятно, констатирую очевидное, но похоже, что тема Windows - это разница. Как они сравниваются, если вы переключаетесь на классическую тему Windows.

...