动态宽度列xaml将不起作用

时间:2014-08-25 18:11:57

标签: c# xaml windows-phone-8

我一直在努力让动态列宽适用于我的简单WP8.1应用。目标是让第一列占据列表框的一半,其他两列各占四分之一。我希望通过使用here所述的*指标指定动态宽度来实现此目的。 这让我可以看到帖子底部的xaml代码。

在我的MainPage中,我将DataContext设置为ObservableCollection,并且所有数据都显示在各自的列中,列只是没有得到所需的宽度(它们都尽可能小)。 什么阻止我的动态宽度工作?我也玩过Horizo​​ntalAlignment和TextBoxes的宽度,但没有成功。我试图寻找答案,我甚至使用了一些有效的例子,但这并没有让我更接近理解为什么它在这里不起作用。

提前致谢。

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

2 个答案:

答案 0 :(得分:1)

项目网格本身的大小适合ListBox。您可以通过设置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>

答案 1 :(得分:0)

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