2012-02-01 14 views
12

次のコードでは、With = "*"の2つの列定義にあるのと同じ幅の2つのリストボックスで終了すると予想しました。このテキストはListBoxよりもはるかに小さく、したがってTextBlockにはテキストを格納するのに十分なスペースがあるため、意味を成さないListBox。*が付いたWPFグリッドの2つの列が同じサイズでない理由を教えてください。

<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> 

enter image description here

WPF自動サイズ変更機能は...私は怒っ任意のアイデアを運転していますか?おかげさまで

EDIT:VS2008ではすべてのことが重要です。

答えて

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> 
3

私の場合は、これは実行時にはうまく動作します。 GUIデザイナーを信頼しないでください、彼らは敵です。

0

設計時と実行時に私のために働きます。

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

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

「スター(*)::

は比例すべて、スターを超える分け、(すべての自動車および固定サイズの列を充填した後)可能な限り多くのスペースを取り、この時

+0

まったくありません。 IDEからSOへ、直接変更は行われません。 VS2008で作業する。多分このことは重要です。 –

+0

@SoMoS weird。私はまったく同じコードを使用していました。ウィンドウやプロジェクトの中には何もありません。 .NETバージョン?私は4.0とVS2010を使用していた – Ray

+0

確かです。私はNET 3.5とVS2008を使用しています –

11

ルック3 */5 *は30 */50 *と同じ意味です。グリッドサイズがその内容に基づいて計算されている場合、スターサイズは機能しません。

どちらがカスですかあなたのコードにe。あなたがTextBlockで設定した300ピクセルより大きなウィンドウにグリッドをペーストした場合、これが他の人にテストされているように見える理由でもあります。私がまったく同じXAMLを使用している場合は、同じ問題が発生します。

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

最新の回答(質問者によって選択されたものではありません)がこの場合最も有用なようです。

+0

私はそれが自分の上にあるウィンドウで全く同じコードを持ち、再現できませんでした。 VS2010と.NET 4.0を使用します。 – Ray

+0

奇数私は同じものを使用していますが、列の幅が1 *と表示されていることを除いて、再現されました。実際の幅は167と133でした。 –

+0

私は本当に奇妙な解決策を見つけました。*を0に変更すると、希望の機能が得られます。\ –

関連する問題