s00sss00s 2022-05-30 18:44 采纳率: 37.5%
浏览 135
已结题

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的行高跟着里面的变化呢?

  • 写回答

3条回答 默认 最新

  • 真的小白啊 2022-05-31 00:08
    关注

    外层 ListBox 绑定 List<OrderList> list
    内层 ListBox 绑定 List<OrderList> list 里面的 ShangPin[] shangpinzu ,
    直接写属性名。
    比如外层某一项是一个 OrderList 对象,内层会去解析外层这个 OrderList 对象的 shangpinzu 属性

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 修改了问题 5月31日
  • 修改了问题 5月31日
  • 展开全部

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来