locked
Windows Phone 8.1 ListView控件, 如何设置Item的宽度,使之适应屏幕大小。 RRS feed

  • 问题

  • 我在listview 的 ItemTemplate 里弄了一个表格。

    表格设置两列。

    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="1*"></ColumnDefinition>
      <ColumnDefinition Width="2*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    我期望的效果是,希望每一个item都适应屏幕宽度。

    结果成了这样。。。

    

    也不能在grid 里  这样写<Grid Width="*">会报错。。。

    请问诸位大神,如何解决?

    2014年12月7日 23:57

答案

  • 实际上你只需要设置ItemContainerStyle就可以了

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

    2014年12月8日 5:48
  • 这边有一种在ListView中让Grid Background水平适配的解决方案就是给Grid一个宽度值,能解决问题,但似乎有点儿歪门邪道,大家也一起看一下,看有什么更好的解决办法没,代码如下

      <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="grid" Width="{Binding W}" Background="Gray">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Name}" HorizontalAlignment="Left" Margin="0" FontSize="30" Foreground="Red"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>

            double width =  Window.Current.Bounds.Width;
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你好你好我好我好我好我好我好我好我好我好" });
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你" });
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你" });


    • 已编辑 Edward_Nuo 2014年12月8日 2:40
    • 已标记为答案 大黑兔 2014年12月9日 23:23
    2014年12月8日 2:38

全部回复

  • 这边有一种在ListView中让Grid Background水平适配的解决方案就是给Grid一个宽度值,能解决问题,但似乎有点儿歪门邪道,大家也一起看一下,看有什么更好的解决办法没,代码如下

      <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid x:Name="grid" Width="{Binding W}" Background="Gray">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock TextWrapping="Wrap" Text="{Binding Name}" HorizontalAlignment="Left" Margin="0" FontSize="30" Foreground="Red"></TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>

            double width =  Window.Current.Bounds.Width;
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你好你好我好我好我好我好我好我好我好我好" });
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你" });
                list.Items.Add(new Model() { W = width, Name = "你好你好你好你好你好你" });


    • 已编辑 Edward_Nuo 2014年12月8日 2:40
    • 已标记为答案 大黑兔 2014年12月9日 23:23
    2014年12月8日 2:38
  • 实际上你只需要设置ItemContainerStyle就可以了

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

    2014年12月8日 5:48
  • 我开始也是这么想的,也是感觉怪

    谢谢你

    2014年12月9日 23:24
  • 谢谢大神
    2014年12月9日 23:24
  • 这样设置后,如果Item里面的TextBlock需要自动换行,TextBlock宽度如何固定?谢谢。
    2015年11月1日 15:05