2012-02-01 90 views
12

用下面的代碼我希望兩個列表框寬度相同的結束,因爲他們是爲兩個columndefinition與=「*」爲什麼具有*的WPF Grid中的兩列不具有相同的大小?

取而代之的是看起來像從文本向上的大小來確定大小因爲這個文本比ListBox小得多,因此TextBox有足夠的空間來容納文本,所以ListBox沒有意義。

<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自動調整大小功能快把我逼瘋了...任何想法? 謝謝。

編輯:一切都在VS2008中完成,以防萬一它很重要。

回答

4

Alex。 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*,這意味着你的屏幕截圖是來自不同於你粘貼的代碼。

+0

沒有。直接從IDE到SO,沒有任何更改。使用VS2008。也許這很重要。 – 2012-02-01 18:38:53

+0

@SoMoS很奇怪。我使用完全相同的代碼。窗口甚至項目中都沒有其他東西。 .NET版本?我正在使用4.0和VS2010 – Ray 2012-02-01 20:46:24

+0

當然可以。我使用NET 3.5和VS2008 – 2012-02-01 21:08:02

11

看看這個:

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

「星號(*):

注意到儘可能多的空間可用(填充所有的汽車後固定大小的列),按比例分配在所有星形因此3 */5 *表示與30 */50 *相同請注意,如果網格大小是根據其內容計算的,則網格大小不起作用

這是cas e在你的代碼中。我懷疑這也是其他人測試它的好處,如果他們將網格粘貼到比TextBlock設置的300像素更大的窗口中。如果我使用完全相同的XAML,我會得到同樣的問題。

編輯:這就是「爲什麼」。看到這個問題的一個可能的替代解決方案:Wpf: Grid: How can i share column/row height width?

最近的答案(不是由提問者選擇的)似乎是在這種情況下最有用的一個。

+0

我有一個自己的窗口完全相同的代碼,無法重現。儘管使用VS2010和.NET 4.0。 – Ray 2012-02-01 20:47:36

+0

奇數。我使用的是相同的,並且它被複制,除了列寬按照預期表示爲1 *。但實際的寬度是167和133. – 2012-02-01 22:31:24

+0

我發現了一個非常奇怪的解決方案。如果我更改*爲0,我會得到所需的功能:\ – 2012-02-02 09:04:08

相關問題