2012-02-01 50 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

相关问题