0

こんにちは!

皆さんに迷惑をかけたくないのですが、WPF のウィンドウの「高さ」プロパティに「自動」値がある場合、ほとんど疑問がありません。ここで物事がどのように機能するかを理解したいからです。XAML コードは次のとおりです。

<Window x:Class="WpfTest.MainWindow"
        x:Name="window"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Collapsed and Hidden buttons comparison" Width="500">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <StackPanel Height="50" Grid.Column="0" Margin="5,0">
            <Button Visibility="Collapsed">This is collapsed button</Button>
            <Button >Below collapsed button</Button>
        </StackPanel>
        <StackPanel Height="50" Grid.Column="1" Margin="5,0">
            <Button  Visibility="Hidden">This is hidden button</Button>
            <Button >Below hidden button</Button>
        </StackPanel>
    </Grid>
</Window>

次のような明示的な高さを使用する場合:

Height="300"

また

 SizeToContent="WidthAndHeight"

幅の前はすべて完璧ですが、デフォルトの高さを入力したり削除したりしないと、ウィンドウはこの奇妙な外観になります。

ここに画像の説明を入力

プロパティの「高さ」の値は「自動」です。手続き型コードを使用して actualHeight を取得すると、526 になります。

MessageBox.Show(Convert.ToString(window.Height),"Height of the window");

ウィンドウがこのように動作する理由を誰かが説明できますか (つまり、ウィンドウが高さを取得する場所から)。前もって感謝します。

4

3 に答える 3

1

M$ が舞台裏で何をしているのかわからないこともありますが、これはウィンドウの高さ/幅に関する私の見解の一部です...そして、のスクリーンサポートに基づいてWPFウィンドウを処理しようとすると、さらに悪化します異なる倍率。人々が大きなテキスト/アイコン サイズの設定を 100%、125%、150% からいつ変更するかを知っています。

とにかく、私が見つけたのは、高さ/幅なしでウィンドウを実行し、「通常」モードで実行すると、画面の約 3/4 が起動するように見えることです...どのように/どこでこれを決定するか私が見つけていないデフォルト。幅を指定しているため、指定された幅の要求を尊重していますが、「通常の」高さを保持しているように見えます。

エクスプレッションブレンドを使用する場合

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignWidth="350" d:DesignHeight="400"

これは、ウィンドウが 350w x 400h で描画されることを期待していることをデザイナーに伝えているようです。「d:」は無視できると述べられているため、これらの寸法には固定されていません。そのため、フォームが実際に描画されると、独自のブードゥー計算を実行して、ウィンドウを適切なサイズに保ちます。

「d:DesignWidth」と「d:DesignHeight」は、高さ/幅が実際のサイズとして適用される単なる高さ/幅の宣言とは異なります。

したがって、これはどのように/なぜということを正確に説明していないかもしれませんが、私が遭遇したことであり、あなたが遭遇していることに光を当てるかもしれないことを願っています.

于 2013-10-01T13:00:26.457 に答える
1

これは実際には WPF の領域外です。( XAML でDouble.NaN別名)を使用すると、Win32 の. Windows には、ウィンドウの配置とサイズ変更のための特定の (文書化されていない) アルゴリズムがあり、それが表示されているものです。AutoCW_USEDEFAULTCreateWindow

Raymond Chen が賢明に示唆しているように、このような文書化されていない API に依存することはできないため、SizeToContent自分でサイズを使用するか指定してください。MinWidthおよびMinHeightプロパティも使用できることに注意してください。

于 2013-10-01T15:44:28.990 に答える
1

ウィンドウを作成すると、デフォルトの高さは SizeToContent に設定されます。Autoが指定されている場合は、必要なスペースだけを取ります。つまり、必要なだけスペースを取ります。デフォルト値です。

詳細については、自動レイアウトの使用の概要を参照してください。

フォームのサイズは、画面の解像度に大きく関係しています

編集

これは意図的なものであり、設計によるものです。

MSDN

プロパティ Form.Size: このプロパティの最大値は、フォームが実行される画面の解像度によって制限されます。値は、各画面サイズ (水平 + 12 および垂直 + 12) で 12 ピクセルを超えることはできません。

于 2013-10-01T12:40:33.700 に答える