怎样实现一个Grid样式的ListBox

xiachm 2012-02-23 05:18:59
现在的视图是这样的:
item1
item2
item3
item4
item5
item6

我想做成这样的:
item1 item2
item3 item4
item5 item6
...全文
337 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiachm 2012-03-01
  • 打赏
  • 举报
回复
谢谢各位,使用WrapPanel解决了。
licj2008 2012-02-29
  • 打赏
  • 举报
回复
用WrapPanel
实现自动折行!

<ListBox Name="ListChannel" Margin="0,-50,10,0" ItemsSource="{Binding ChannelList}" Height="530" SelectedIndex="{Binding ChannelliIndex,Mode=TwoWay}" Foreground="{StaticResource WhiteBrushKey}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Width="400" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>

<Grid Margin="5,0,5,10" Width="180">
<Rectangle Width="172" Height="172" Fill="#FF830F49"></Rectangle>
<Image Height="172" Width="172" Source="{Binding ImgUrl}" Margin="0,10,0,0" />
<TextBlock Text="{Binding nodeName}" HorizontalAlignment="Center" TextWrapping="NoWrap" FontSize="22" Margin="50,130,50,0" />
</Grid>

</DataTemplate>
</ItemsControl.ItemTemplate>

</ListBox>
macrojj 2012-02-29
  • 打赏
  • 举报
回复
DataTemplate
就搞定了啊
ycproc 2012-02-28
  • 打赏
  • 举报
回复


给你一个 样式吧

具体的自己改哈

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid>
<TextBlock HorizontalAlignment="Left" Margin="31,15,0,0" Name="textBlockKSRQ" Text="开始日期" VerticalAlignment="Top" />
<TextBlock HorizontalAlignment="Left" Margin="31,100,0,0" Name="textBlockJSRQ" Text="结束日期" VerticalAlignment="Top" />
<toolkit:DatePicker HorizontalAlignment="Left" Margin="120,0,121,0" Name="datePickerKSRQ" VerticalAlignment="Top" Width="200" IsHitTestVisible="True" DataContext="{Binding}" />
<toolkit:DatePicker HorizontalAlignment="Left" Margin="120,75,115,0" Name="datePickerJSRQ" VerticalAlignment="Top" Width="200" IsHitTestVisible="True" DataContext="{Binding}" />
<TextBlock HorizontalAlignment="Left" Margin="31,170,0,0" Name="textBlockSFYWC" Text="是否完成" VerticalAlignment="Top" />
<Button Content="查 询" HorizontalAlignment="Left" Margin="330,150,0,0" Name="buttonCX" VerticalAlignment="Top" Click="buttonCX_Click" />
<StackPanel >
<toolkit:ListPicker Height="auto" HorizontalAlignment="Left" Margin="130,155,0,0" Name="listPickerSFYZX" VerticalAlignment="Top" Width="180">
<toolkit:ListPickerItem Content="所有" Tag="2"></toolkit:ListPickerItem>
<toolkit:ListPickerItem Content="已完成" Tag="1"></toolkit:ListPickerItem>
<toolkit:ListPickerItem Content="未完成" Tag="0"></toolkit:ListPickerItem>
</toolkit:ListPicker>
<Grid>
<StackPanel>
<Grid Height="35" Margin="5,3,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="200" Width="450" MaxWidth="550" />
<ColumnDefinition MinWidth="170" Width="170" MaxWidth="200"/>
<ColumnDefinition MinWidth="100" Width="100" MaxWidth="120"/>
<ColumnDefinition MinWidth="120" Width="120" MaxWidth="120"/>
</Grid.ColumnDefinitions>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="0">
<TextBlock Grid.Column="0" HorizontalAlignment="Center" Text="客户名称"></TextBlock>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="1">
<TextBlock Grid.Column="1" HorizontalAlignment="Center" Text="客户电话"></TextBlock>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="2">
<TextBlock Grid.Column="2" HorizontalAlignment="Center" Text="是否完成"></TextBlock>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="3">
<TextBlock Grid.Column="3" HorizontalAlignment="Center" Text="操作"></TextBlock>
</Border>
</Grid>
<ListBox x:Name="listbox1" Height="305" ItemsSource="{Binding}" Margin="0,0,0,0" VerticalAlignment="Top" IsSynchronizedWithCurrentItem="{x:Null}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="35" Margin="5,3,0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="200" Width="450" MaxWidth="550"/>
<ColumnDefinition MinWidth="170" Width="170" MaxWidth="200" />
<ColumnDefinition MinWidth="100" Width="100" MaxWidth="120"/>
<ColumnDefinition MinWidth="120" Width="120" MaxWidth="120" />
</Grid.ColumnDefinitions>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="0">
<TextBlock Grid.Column="0" Text="{Binding KHXM}"></TextBlock>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="1">
<HyperlinkButton Grid.Column="1" HorizontalContentAlignment="Left" Tag="{Binding KHXM}" Content="{Binding YDDH}" Click="HyperlinkButton_Click_CALLGDDH"></HyperlinkButton>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="2">
<TextBlock Grid.Column="2" Text="{Binding SFYZX}"></TextBlock>
</Border>
<Border BorderBrush="Gray" BorderThickness="1" Grid.Column="3">
<HyperlinkButton Name="HyperlinkButtonTBRZ" Tag="{Binding}" Content="填报日志" Click="HyperlinkButtonTBRZ_Click" IsEnabled="{Binding boolButtonEnable}"></HyperlinkButton>
</Border>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</StackPanel>
</Grid>
</Grid>
</Grid>
wongeo 2012-02-28
  • 打赏
  • 举报
回复
WrapPanel
用这个控件
在toolkit里面的
自己应该会添加吧
xiachm 2012-02-27
  • 打赏
  • 举报
回复
各位,还有什么好办法吗?这种效果在WP7的应用中很常见,大家都是怎么做的呀?
xiachm 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 beyondma 的回复:]

没太看明白楼主的问题,两个LISTBOX不可以吗?
[/Quote]
我就是想实现前面贴出的图片中的效果。只是那个例子中图片的位置是在代码中写死的。而我希望自动的布局,另外图片的数量也不一定。

如果是两个ListBox那么在滑动时会不会感觉不是一个整体?
beyondma 2012-02-25
  • 打赏
  • 举报
回复
没太看明白楼主的问题,两个LISTBOX不可以吗?
xiachm 2012-02-24
  • 打赏
  • 举报
回复
我再怎么改source,也只能对应Model中的一条。我的数据源自一个XML文件,类似这个

<items>
<item>1.jpg</item>
<item>2.jpg</item>
<item>3.jpg</item>
<item>4.jpg</item>
</items>


我现在的代码是这样的:

<ListBox Margin="0,0,0,0" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,0" Width="380" Height="200">
<Image Height="180" Width="180" Source="{Binding pic}"/>
<Image Height="180" Width="180" Margin="20,0,0,0" Source="{Binding pic}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

改source的话,相应的逻辑会复杂的多。是否有什么更好的办法?类似这种效果WP7里很常见,他们都是怎么做的?
June1991 2012-02-24
  • 打赏
  • 举报
回复
我知道 你不能该Source吗?
xiachm 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 june1991 的回复:]

可以用2个Image啊C# code
<StackPanel Orientation="Horizontal">
<Image HorizontalAlignment="Left" Margin="0,0,0,0" x:Name="img1" Source="{Binding Pic}"/>
……
[/Quote]
试了下,样式是可以了,但是每行左右两张图片是一样的,看你的代码两个image绑定的是同一个pic

我想做成这样的:
item1 item2
item3 item4
item5 item6
xiachm 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 june1991 的回复:]

这图片是固定的吗?
[/Quote]
不是,是从网上拉取的。所以我想实现绑定,而不是像刚才我贴出的代码,写死在里面的。
June1991 2012-02-24
  • 打赏
  • 举报
回复
可以用2个Image啊
 <StackPanel Orientation="Horizontal">
<Image HorizontalAlignment="Left" Margin="0,0,0,0" x:Name="img1" Source="{Binding Pic}"/>
<Image HorizontalAlignment="Left" Margin="0,0,0,0" x:Name="img2" Source="{Binding Pic}"/>
</StackPanel>

绑定数据 ,Margin改改
June1991 2012-02-24
  • 打赏
  • 举报
回复
这图片是固定的吗?
xiachm 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 june1991 的回复:]

ListBox的绑定要用 C# code
<ListBox.ItemTemplate>
<DataTemplate>

位置用C# code
<StackPanel Orientation="Horizontal">
控制
[/Quote]
可是我希望我的列表可以显示两列,类似这张图

可ListBox只能显示一列,用Grid又不能实现绑定。还有什么办法吗?
June1991 2012-02-24
  • 打赏
  • 举报
回复
ListBox的绑定要用
<ListBox.ItemTemplate>
<DataTemplate>

位置用
 <StackPanel Orientation="Horizontal">
控制
xiachm 2012-02-24
  • 打赏
  • 举报
回复
我知道一种办法是,把Grid放到ListBox中,以实现flickable,类似下面的代码:

<ListBox Grid.Row="1" >
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>

<Image Source="Thumbnails\1.jpeg" Grid.Row="0" Grid.Column="0" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" />
<Image Source="Thumbnails\2.jpeg" Grid.Row="0" Grid.Column="1" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" />
<Image Source="Thumbnails\3.jpeg" Grid.Row="1" Grid.Column="0" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" />
<Image Source="Thumbnails\4.jpeg" Grid.Row="1" Grid.Column="1" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" />
<Image Source="Thumbnails\5.jpeg" Grid.Row="2" Grid.Column="0" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" />
</Grid>
</ListBox>

但这无法实现数据的绑定,请问用什么办法可是实现类似ListBox.ItemTemplate的绑定效果?
云应用开发 Google App Engine & Google Web Toolkit入门指南 侯炯 目录 第1章 应该了解下 1.1云基本知识 1.2Google App engine 1.3Google Web Toolkit 第2章 环境搭建 2.1安装JDK 2.2安装Eclipse 2.3安装SDK和Eclipse插件 第3章 Hello World! 3.1 创建项目 3.2 目录结构说明 3.3 修改文件 3.4 运行调试 第4章 华丽的控件 4.1 显示文本——Lable,HTML 4.2 方形选择框——CheckBox 4.3 圆形选择框——RadioButton 4.4 按钮——Button 4.5 自定义按钮——PushButton,ToggleButton 4.6 文件上传——FileUpload 4.7 时间选择器——DatePicker 4.8 列表控件——ListBox 4.9 联想输入框——Suggest Box 4.10 树结构——Tree 4.11 菜单条——MenuBar 4.12 栈板——StackPanel 4.13 基本输入框的——TextBox,PasswordTextBox,TextArea 4.14 弹出框框——RichTextArea 4.15 弹出对话框——DialogBox 4.16 修饰面板——DecoratorPanel 4.17 自然布局面板——FlowPanel 4.18 水平布面板——HorizontalPanel 4.19 垂直布局面板——VerticalPanel 4.20 绝对定位面板——AbsolutePanel 4.21 停靠面板——DockPanel 4.22 展开面板——DisclosurePanel 4.23 标签面板——TablePanel 4.24 水平拆分面板——HorizontalSplitPanel 4.25 垂直拆分面板——VerticalSplitPanel 4.26 网格——Grid 4.27 灵活表格——FlexTable 第5章 装饰控件 5.1 控件的主题 5.2 通过CSS装饰控件 5.3 通过代码修改控件 5.4 实例——火车时刻表 第6章 通信机制 6.1 RPC机制 6.1.1什么是RPC 6.1.2接口函数实现 6.1.3可序列化 6.1.4 注册服务 6.1.5 使用服务 6.1.6 实例——股票价格表RPC版本 6.2 Servlet机制 6.2.1 Servlet介绍 6.2.2 实例——Servlet版本HelloWorld 第7章 数据操作 7.1 概述 7.2 定义数据类 7.3 创建,获取和删除数据 7.4 查询和索引 7.5 事务 7.6 关系 7.7 实例——员工管理系统 第8章 国际化 8.1 普通文本国际化 8.2 参数文本国际化 8.3 实例 第9章 应用托管 9.1 申请Google App Engine账号 9.2 上传应用 9.3 应用维护指南 第10章 实战 10.1 入门例子——股票系统 10.1.1创建项目 10.1.2设计应用 10.1.3建立用户界面 10.1.4创建控件和面板 10.1.5事件处理 10.1.6实现客户端功能 10.1.7添加应用样式 10.1.8国际化 10.1.9服务器交互 10.1.10让App Engine托管应用 10.2 中级例子——个人网站 10.2.1样子与功能 10.2.2创建项目 10.2.3定义数据结构 10.2.4规定通讯协议 10.2.5实现数据交互和发送邮件功能 10.2.6注册提供服务 10.2.7总体界面设计 10.2.8首页界面实现 10.2.9日志界面实现 10.2.10关于我界面实现 10.2.11留言界面实现 10.2.12管理界面实现 10.2.13统筹界面和连接功能 10.2.14国际化 10.2.15欢迎界面和样式文件修改 10.2.16总结 10.3 高级例子——号码管家(GAE+GWT+Android) 10.3.1样子与功能 10.3.2创建项目 10.3.4规定通讯协议 10.3.5实现服务端的功能 10.3.6注册提供服务 10.3.7帮助界面设计 10.3.8服务条款界面设计 10.3.9编辑界面设计 10.3.10登陆界面设计 10.3.11列表界面设计 10.3.12统筹界面和连接功能 10.3.13国际化 10.3.14欢迎界面和样式文件修改 10.3.15手机端界面与功能实现 10.3.16总结
Silverlight2.0功能展示Demo源码 1、Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox 2、Silverlight(4) - 2.0控件之DataGrid, DatePicker, Grid, GridSplitter, HyperlinkButton, Image 3、Silverlight(5) - 2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton 4、Silverlight(6) - 2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton 5、Silverlight(7) - 2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle 6、Silverlight(8) - 2.0图形之基类System.Windows.Shapes.Shape 7、Silverlight(9) - 2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush 8、Silverlight(10) - 2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性 9、Silverlight(11) - 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画 10、Silverlight(12) - 2.0外观之样式, 模板, 视觉状态和视觉状态管理器 11、Silverlight(13) - 2.0交互之鼠标事件和键盘事件 12、Silverlight(14) - 2.0交互之InkPresenter(涂鸦板) 13、Silverlight(15) - 2.0数据之一次绑定, 单向绑定, 双向绑定, INotifyPropertyChanged, 数据转换, 数据验证 14、Silverlight(16) - 2.0数据之独立存储(Isolated Storage) 15、Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 16、Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 17、Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据 18、Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据, 以流的方式上传/下载数据 19、Silverlight(21) - 2.0通信之WebRequest和WebResponse, 对指定的URI发出请求以及接收响应 20、Silverlight(22) - 2.0通信之调用WCF服务, 对传输信息做加密 21、Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service) 22、Silverlight(24) - 2.0通信之Socket, 开发一个多人聊天室 23、Silverlight(25) - 2.0线程之Thread, Timer, BackgroundWorker, ThreadPool 24、Silverlight(26) - 2.0线程之Lock, Interlocked, EventWaitHandle, Monitor, ThreadStaticAttribute 25、Silverlight(27) - 2.0网页之可脚本化, 与DOM的交互, 与JavaScript的交互

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧