wpf的listbox嵌套listbox内层的数据过长时外层行高如何跟着自适应
问题遇到的现象和发生背景
WPF的listbox嵌套listbox时,里层的listbox数据过长时,外层的行高不能自适应变高
问题相关代码,请勿粘贴截图
<Window x:Class="WPFceshiTEST.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFceshiTEST"
mc:Ignorable="d"
Title="MainWindow" >
<Grid Width="1200" Height="600">
<ListBox Name="LB1" HorizontalContentAlignment="Stretch" Width="1000" Height="500" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="300"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding ordernumber}"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding shuliang}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="我是第二行" Grid.ColumnSpan="3" />
<ListBox Name="LB2" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding shangpinzu}" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding tupian}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPFceshiTEST
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
List<OrderList> list = new List<OrderList>();
ShangPin[] shangpinzus = new ShangPin[10];
for (int i = 0; i <10; i++)
ShangPin shangpins = new ShangPin("第" + i + "个商品的图片", "第" + i + "个商品的标题");
shangpinzus[i] = shangpins;
OrderList ord = new OrderList("订单编号:A500" + i + " 商品数量:", 10, shangpinzus);
list.Add(ord);
LB1.ItemsSource = list;
public class OrderList
public string ordernumber { get; set; }
public int shuliang { get; set; }
public ShangPin[] shangpinzu { get; set; }
public OrderList(string ordernumber, int shu, ShangPin[] shangpinmingxi)
this.ordernumber = ordernumber;
this.shuliang = shu;
shangpinzu = shangpinmingxi;
public class ShangPin
public string tupian { get; set; }
public string biaoti { get; set; }
public ShangPin(string tu, string bt)
tupian = tu;
biaoti = bt;
运行结果及报错内容
我的解答思路和尝试过的方法
数据组成是: 订单列表,包含了订单编号,订单数量,商品详情(商品详情包含标题,图片);
需要外层listbox显示订单编号和订单数量,内层的listbox显示对应的该行订单的标题,图片列表。
两个listbox嵌套在一起的时候,外层的listbox我可以通过 itemsource=list,在c#这边赋值,可以展现出来,内层的listbox通过绑定list的集合对象的子集合也可以读取到数据,子集合数据过多时,内层的listbox不会自己变高,受外层的listbox的固定行高的影响,出现了右侧的下拉条,怎么才能让外层的listbox的行高跟着里面的变化呢?
0 提建议
邀请回答
编辑 收藏 删除 收藏 举报
追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金
¥ 51
(您已提供 ¥ 20, 还可追加 ¥
支付方式
扫码支付
加载中...
3
条回答
默认
最新
-
真的小白啊
2022-05-31 00:08
关注
外层
ListBox
绑定
List<OrderList> list
,
内层
ListBox
绑定
List<OrderList> list
里面的
ShangPin[] shangpinzu
,
直接写属性名。
比如外层某一项是一个
OrderList
对象,内层会去解析外层这个
OrderList
对象的
shangpinzu
属性
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
-
关注
要不要尝试修改下思路,
不用两个listview,而是用其他的组件替换下?
当然,如果觉得两个listview更好想要用这个方案的话,这边帮你看下有没有解决方案。
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
-
是小晴晴呀
2022-05-30 21:44
关注
是没找到数据吗
本回答被题主选为最佳回答
, 对您是否有帮助呢?
本回答被专家选为最佳回答
, 对您是否有帮助呢?
本回答被题主和专家选为最佳回答
, 对您是否有帮助呢?
举报
按下Enter换行,Ctrl+Enter发表内容
查看更多回答(2条)