13

次のコードでは、With="*" を使用して 2 つの列定義になっているため、同じ幅の 2 つの ListBox で終了すると予想していました。

これの代わりに、サイズは ListBox のテキストのサイズから決定されるように見えますが、このテキストは ListBox よりもはるかに小さいため、TextBlock にはテキストを収容するのに十分なスペースがあるため、意味がありません。

<Window x:Class="UnderstandSizing.Window5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window5" 
SizeToContent="WidthAndHeight"
ResizeMode="NoResize" >

<Grid>  
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock Text="Text1longer" Grid.Row="0" Grid.Column="0" x:Name="Test1" />
    <TextBlock Text="Text1" Grid.Row="0" Grid.Column="2" />
    <ListBox Grid.Row="1" Grid.Column="0" Height="150" />

    <ListBox Grid.Row="1" Grid.Column="2" Height="150" />
    <TextBlock Grid.Row="2" Grid.ColumnSpan="3"  Text="This textblock sets the max width" Width="300" />
</Grid>
</Window>

ここに画像の説明を入力

WPF の自動サイズ変更機能は私を怒らせています...何かアイデアはありますか? ありがとう。

編集:念のため、VS2008で行われたすべて。

4

4 に答える 4

12

これを見てください:

http://www.wpftutorial.net/GridLayout.html

"星 (*):

(すべての自動サイズおよび固定サイズの列を埋めた後) 使用可能なスペースをできるだけ多く使用し、すべての星型サイズの列に比例して分割します。したがって、3*/5* は 30*/50* と同じ意味です。グリッド サイズがそのコンテンツに基づいて計算される場合、星のサイズ変更は機能しないことに注意してください。"

あなたのコードではこれが当てはまります。TextBlock で設定された 300 ピクセルより大きいウィンドウに Grid を貼り付けた場合、他の人がそれをテストしても問題ないように見えたのも、これが原因だと思います。まったく同じ XAML を使用すると、同じ問題が発生します。

編集:これが「理由」です。考えられる代替ソリューションについては、この質問を参照してください: Wpf: Grid: How can i share column/row height width?

この場合、最新の回答(質問者が選択した回答ではありません)が最も役立つようです。

于 2012-02-01T18:39:45.837 に答える
4

アレックス。Aは何が起こっているのか正確な原因を見つけ、私はラッキーストライクで解決策を見つけました. * を 0 に変更するだけで、期待どおりの結果が得られます (私に尋ねると奇妙です)。

<Window x:Class="UnderstandSizing.Window5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window5" 
SizeToContent="WidthAndHeight"
ResizeMode="NoResize" >

<Grid>  
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="0" />
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="0" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

<TextBlock Text="Text1longer" Grid.Row="0" Grid.Column="0" x:Name="Test1" />
<TextBlock Text="Text1" Grid.Row="0" Grid.Column="2" />
<ListBox Grid.Row="1" Grid.Column="0" Height="150" />

<ListBox Grid.Row="1" Grid.Column="2" Height="150" />
<TextBlock Grid.Row="2" Grid.ColumnSpan="3"  Text="This textblock sets the max width" Width="300" />
</Grid>
</Window>
于 2012-02-02T09:08:00.760 に答える
3

私にとって、これは実行時に問題なく機能します。GUI デザイナーを信用しないでください。彼らは敵です。

于 2012-02-01T17:36:08.850 に答える
0

設計時と実行時に機能します。

GUI デザイナーは、これらのピクセル サイズを表示すべきではありません。これは1*、スクリーンショットが貼り付けたコードとは異なるコードからのものであることを意味します。

于 2012-02-01T17:37:40.743 に答える