ListView ItemTemplate网格100%宽度

时间:2015-11-09 13:24:43

标签: xaml responsive-design user-controls windows-phone-8.1

我制作了一个ListView ItemTemplate,我希望它能够响应(当方向发生变化时,例如,listView项目的大小会发生变化)。我使用网格作为网格内部元素的控件,但它没有表现。 ListView.ItemContainerStyle具有属性Horizo​​ntalAlignment =" Stretch"这是我想要的行为,而ItemContainerStyle是正确的宽度。在Border和Grid中,我有相同的Horizo​​ntalAlignment =" Stretch"当包含在内部的TextBox包含大量文本时,它们会溢出,当TextBox中很少或没有文本时,Border元素会缩小到小于ItemContainerStyle显示的范围。

<ListView ItemsSource="{Binding TileStories}" x:Name="cont" Margin="0,10,0,10" Background="{StaticResource CustomResourceBrush}" BorderBrush="{StaticResource CustomResourceBrush}" Foreground="{StaticResource CustomResourceBrush}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                <Setter Property="Margin" Value="20,10,20,10" />
                <Setter Property="Foreground" Value="{StaticResource BTVioletBrush}" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border CornerRadius="20" BorderThickness="0" Width="{Binding ScrollViewerWidth}" Background="White" HorizontalAlignment="Stretch">
                    <StackPanel Height="160" Orientation="Horizontal">
                        <Grid Background="black">
                            <TextBox Text="Example">
                        </Grid>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

4 个答案:

答案 0 :(得分:1)

只需这样做

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid HorizontalAlignment="Stretch">
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

答案 1 :(得分:0)

为ItemContainerStyle

定义MinHeight为0

答案 2 :(得分:0)

添加到ItemContainerStyle

            <Setter Property="HorizontalContentAlignment"
                    Value="Stretch" />

我认为Width="{Binding ScrollViewerWidth}"不是必需的。你可以删除它。

答案 3 :(得分:0)

我没有找到解决方案,但我确实找到了解决方法。如果我使用Width="0",其中{Binding ActualWidth, ElementName=StackPanel, Mode=OneWay}是数据模板中的面板,则网格与StackPanel绑定。我在VS2013中围绕着设计师,并发现Width为0,因为(我假设)数据模板中的项目是逐个绘制的,因此Width在第一个时为零绘制了模板,依此类推。我猜想我没有解释得那么好,但重要的是解决方案:

<PivotItem x:Name="Feed">
    ....
    <Border CornerRadius="20" BorderThickness="0" Background="White" HorizontalAlignment="Stretch">
        <StackPanel Height="160" Orientation="Horizontal">
            <Grid HorizontalAlignment="Stretch" Width="{Binding ActualWidth, ElementName=Feed, Mode=OneWay}">
            ........
            </Grid>
        </StackPanel>
    </Border>
...
</PivotItem>

我认为PivotItem具有非变量Width意味着Grid具有继承的具体Width