none
GridView动态item大小 RRS feed

  • 问题

  • 想实现下图的效果,目前GridView的item默认大小是第一个item的大小,导致后面超长的文案显示不全,不知道有没有办法实现下面那种根据内容大小自动调整大小的效果,VariableSizedWrapGrid好像有局限性,只能根据倍数来调整。

    2015年8月12日 7:05

答案

  • 在他的子元素上用  VariableSizedWrapGrid.ColumnSpan 这个附加属性来设置每一个的横跨列数,这样可以做到每个元素宽度适应内容。

    但是你需要将第一个元素的宽度做小,这样后面的元素就可以是第一个元素的倍数。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    • 已标记为答案 紫柔 2015年8月24日 3:58
    2015年8月13日 13:41
  • 不知道你的项目是什么类型的。

    如果是win8.1或者uwp通用应用,用这个 http://www.nuget.org/packages/winrtxamltoolkit.windows

    如果是wp8.1 RT 用这个 http://www.nuget.org/packages/winrtxamltoolkit.windowsphone

    然后项目中,xaml 上面 加入 xmlns:tookit="using:WinRTXamlToolkit.Controls"

    然后更改列表控件的面板控件 ItemsPanel 如下:

    <ListView Grid.Row="1" ItemContainerStyle="{StaticResource OnlyContentStyle}"
                                                  ItemsSource="{Binding ChildTypeList}"
                                                  SelectionMode="None">
                                            <ListView.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <tookit:WrapPanel Orientation="Horizontal"/>
                                                </ItemsPanelTemplate>
                                            </ListView.ItemsPanel>
                                            <ListView.ItemTemplate>
                                                <DataTemplate>
                                                    <TextBlock Style="{StaticResource Normal2TextStyle}"
                                                               Text="{Binding Title}" Margin="9.5"
                                                               />
                                                </DataTemplate>
                                            </ListView.ItemTemplate>
                                        </ListView>

    • 已建议为答案 十八子 2015年8月18日 13:57
    • 已标记为答案 紫柔 2015年8月25日 5:14
    2015年8月18日 2:39
  • 你好,根据你所描述的问题需求,你可以使用模板来将Item中的Width属性进行数据绑定(宽度由当前文本的长度来决定)即可!
    • 已标记为答案 紫柔 2015年8月25日 5:14
    2015年8月18日 4:14
  • 你可以换一个思路,不用GridView,自己定义一个控件实现这个功能

    新浪微博http://weibo.com/xianglitian,欢迎围观

    2015年8月18日 5:46
    版主

全部回复

  • 在他的子元素上用  VariableSizedWrapGrid.ColumnSpan 这个附加属性来设置每一个的横跨列数,这样可以做到每个元素宽度适应内容。

    但是你需要将第一个元素的宽度做小,这样后面的元素就可以是第一个元素的倍数。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    • 已标记为答案 紫柔 2015年8月24日 3:58
    2015年8月13日 13:41
  • 不知道你的项目是什么类型的。

    如果是win8.1或者uwp通用应用,用这个 http://www.nuget.org/packages/winrtxamltoolkit.windows

    如果是wp8.1 RT 用这个 http://www.nuget.org/packages/winrtxamltoolkit.windowsphone

    然后项目中,xaml 上面 加入 xmlns:tookit="using:WinRTXamlToolkit.Controls"

    然后更改列表控件的面板控件 ItemsPanel 如下:

    <ListView Grid.Row="1" ItemContainerStyle="{StaticResource OnlyContentStyle}"
                                                  ItemsSource="{Binding ChildTypeList}"
                                                  SelectionMode="None">
                                            <ListView.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <tookit:WrapPanel Orientation="Horizontal"/>
                                                </ItemsPanelTemplate>
                                            </ListView.ItemsPanel>
                                            <ListView.ItemTemplate>
                                                <DataTemplate>
                                                    <TextBlock Style="{StaticResource Normal2TextStyle}"
                                                               Text="{Binding Title}" Margin="9.5"
                                                               />
                                                </DataTemplate>
                                            </ListView.ItemTemplate>
                                        </ListView>

    • 已建议为答案 十八子 2015年8月18日 13:57
    • 已标记为答案 紫柔 2015年8月25日 5:14
    2015年8月18日 2:39
  • 你好,根据你所描述的问题需求,你可以使用模板来将Item中的Width属性进行数据绑定(宽度由当前文本的长度来决定)即可!
    • 已标记为答案 紫柔 2015年8月25日 5:14
    2015年8月18日 4:14
  • 你可以换一个思路,不用GridView,自己定义一个控件实现这个功能

    新浪微博http://weibo.com/xianglitian,欢迎围观

    2015年8月18日 5:46
    版主
  • 我这边解决了

    http://www.cnblogs.com/Damai-Pang/p/5206412.html

    2016年2月23日 8:06