C# 动态宽度列xaml-won';行不通

C# 动态宽度列xaml-won';行不通,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我一直在尝试让动态列宽为我的简单WP8.1应用程序工作。目标是让第一列占据列表框的一半,其他两列各占四分之一。我希望通过指定一个动态宽度来实现这一点,使用所描述的*指示器。 这让我可以看到我文章底部的一段xaml代码 在我的主页中,我将DataContext设置为ObservableCollection,所有数据都显示在各自的列中,这些列没有达到所需的宽度(它们都尽可能小)。 是什么阻止我的动态宽度工作?我也曾玩弄过文本框的水平对齐和宽度,但没有成功。我试着四处寻找答案,我甚至使用了一些确实有效

我一直在尝试让动态列宽为我的简单WP8.1应用程序工作。目标是让第一列占据列表框的一半,其他两列各占四分之一。我希望通过指定一个动态宽度来实现这一点,使用所描述的*指示器。 这让我可以看到我文章底部的一段xaml代码

在我的主页中,我将DataContext设置为ObservableCollection,所有数据都显示在各自的列中,这些列没有达到所需的宽度(它们都尽可能小)。 是什么阻止我的动态宽度工作?我也曾玩弄过文本框的水平对齐和宽度,但没有成功。我试着四处寻找答案,我甚至使用了一些确实有效的例子,但这并没有让我更接近于理解为什么它在这里不起作用

提前谢谢

<Grid>
    <ListBox Name="transactionListBox" ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
              <DataTemplate>
                <Grid Margin="0,0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="2*"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Name}"/>
                    <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Category}"/>
                    <TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Amount}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate> 
    </ListBox>
</Grid>


我认为您需要在列表框或网格上设置一个约束宽度。使用您的代码,网格和列表框将重新调整大小以适应内容,因此不需要动态列定义。

项目网格本身的大小将由列表框调整。通过设置
ItemContainerStyle
使ListBoxItems拉伸以水平填充,可以覆盖此行为:

<ListBox Name="transactionListBox" ItemsSource="{Binding}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>

    ...
</ListBox>

...

谢谢你,它很有魅力。为什么这样做,但例如将网格设置为HorizontalAlignment=“Stretch”不起作用?@不清楚这是因为
ListBox
控件在网格周围插入了一个包装器(一个
ListBoxItem
)。默认情况下,ListBox使用一个
StackPanel
来排列其子项,而子项又不是设计为水平拉伸填充的。您的答案是正确的(调整网格的宽度),但我选择了McGarnagle的答案,因为它还解释了如何确保网格自动拉伸。