如何折叠listviewitem UWP中的子控件

2023-12-14

通用Windows平台,C#

如何从代码隐藏中折叠/展开项目 MainListView listitem 的子列表视图?我还没有找到任何有效的东西。 我想在 SelectionChanged 事件中执行此操作。

XAML

        <ListView x:Name="DestListView" SelectionMode="Single" Margin="0,60,0,0" SelectionChanged="listview_SelectionChanged" >
        <ListView.ItemContainerStyle >
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                <Setter Property="BorderThickness" Value="0,.5,0,0" />
                <Setter Property="BorderBrush" Value="Gainsboro" />
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate >
            <DataTemplate>
                <StackPanel>
                    <Grid>
                        <Grid HorizontalAlignment="Stretch">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="40"/>
                                <ColumnDefinition Width="100"/>
                                <ColumnDefinition Width="50"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="50"/>
                            </Grid.ColumnDefinitions>

                            <CheckBox Grid.Column="0" MinWidth="20" />
                            <TextBlock Grid.Column="1" Text="{Binding destination}" FontSize="20" />
                            <TextBlock Grid.Column="2" Text="{Binding total_quantity}" FontSize="20" Margin="10,0,0,0"/>
                            <TextBlock Grid.Column="3" Text="{Binding package_type}" FontSize="20" HorizontalAlignment="Center" Margin="10,0,0,0"/>
                            <TextBlock Grid.Column="4" Text="{Binding total_weight}" FontSize="20" Margin="10,0,0,0"/>
                        </Grid>
                    </Grid>

                    **<!--Collpase/Expand-->**

                    <ListView x:Name="DetailListView" ItemsSource="{Binding destination_data}" SelectionMode="Multiple" Margin="20,0,0,0" Visibility="Collapsed" >
                        <ListView.ItemTemplate >
                            <DataTemplate >
                                <StackPanel Orientation="Vertical">
                                    <TextBlock Text="{Binding visual_number}" FontSize="14" Foreground="White" HorizontalAlignment="Stretch" />
                                  </StackPanel>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

                </StackPanel>

            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

隐藏代码

     private void listview_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //GET THE ITEM
        var selectItem = DestListView.Items[DestListView.SelectedIndex];

        //GET THE CHILD SOMEHOW
        //ListView childListView = (ListView)...not sure what to do here

        //if (childListView != null)
        //{
        //    if (childListView.Visibility == Visibility.Collapsed)
        //    {
        //        //childListView.Visibility = Visibility.Collapsed;
        //    }
        //    else
        //    {
        //        //childListView.Visibility = new Visibility;
        //    }
        //}

    }

我将这样做。

我将创建两个数据模板,一个在选择(展开)时显示,另一个在未展开时显示。

下面是我的视图模型.

public class MyViewModel
{
    public MyViewModel()
    {
        myItems = new ObservableCollection<MyItems>();
        for(int i=1;i<=10;i++)
        {
            MyItems item = new MyItems();
            item.Name = "Main Item " + i.ToString();
            ObservableCollection<MySubItems> subItems = new ObservableCollection<MySubItems>();
            for (int j=1;j<=5;j++)
            {
                subItems.Add(new MySubItems() { Title = "Sub Item " + j.ToString() });
            }
            item.Data = subItems;
            myItems.Add(item);
        }
    }

    public ObservableCollection<MyItems> myItems { get; set; }
}

public class MyItems
{
    public string Name { get; set; }
    public ObservableCollection<MySubItems> Data { get; set; }
}

public class MySubItems
{
    public string Title { get; set; }
}

下面是我的主页.xaml as 要求的

<Page
    x:Class="App2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App2"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Page.DataContext>
        <local:MyViewModel/>
    </Page.DataContext>

    <Page.Resources>
        <DataTemplate x:Key="NoSelectDataTemplate">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <TextBlock Text="{Binding Name}" />
            </Grid>
        </DataTemplate>
        <DataTemplate x:Key="SelectDataTemplate">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <TextBlock Text="{Binding Name}" />
                <ListView ItemsSource="{Binding Data}" Grid.Row="1">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Title}" />
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </DataTemplate>
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListView HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding myItems}" SelectionChanged="ListView_SelectionChanged" ItemTemplate="{StaticResource NoSelectDataTemplate}">
            <ListView.ItemContainerStyle >
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    <Setter Property="BorderThickness" Value="0,.5,0,0" />
                    <Setter Property="BorderBrush" Value="Gainsboro" />
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </Grid>
</Page>

下面是我的选择已更改事件看起来像。

private int PreviousIndex;
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ListView lv = sender as ListView;

    if (PreviousIndex >=0)
    {
        ListViewItem prevItem = (lv.ContainerFromIndex(PreviousIndex)) as ListViewItem;
        prevItem.ContentTemplate = Resources["NoSelectDataTemplate"] as DataTemplate;
    }

    ListViewItem item = (lv.ContainerFromIndex(lv.SelectedIndex)) as ListViewItem;
    item.ContentTemplate = Resources["SelectDataTemplate"] as DataTemplate;

    PreviousIndex = lv.SelectedIndex;
}

这里是Output

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何折叠listviewitem UWP中的子控件 的相关文章

随机推荐

  • 无法向某些控件发送 WM_INPUTLANGCHANGEREQUEST

    我正在研究 又一个 键盘布局切换器并在 Skype 窗口 win7 x64 上的版本 6 22 中遇到了奇怪的问题 任意组合GetForegroundWindow GetFocus GetParentWindow 无法成功更改布局仅在消息输
  • 将 Double 值格式化为小数点后两位的最佳方法[重复]

    这个问题在这里已经有答案了 我在应用程序中处理大量双精度值 有没有简单的方法来处理 Java 中十进制值的格式 还有比这更好的方法吗 DecimalFormat df new DecimalFormat 我想做的基本上是格式化双值 例如 2
  • 为什么 numpy.mean 不是多线程的?

    自从我注意到 numpy 它只使用一个核心以来 我一直在寻找轻松地对一些简单分析代码进行多线程处理的方法 尽管事实上它应该是多线程的 我知道 numpy 是为多个核心配置的 因为我可以看到使用 numpy dot 的测试使用了我的所有核心
  • CoreData、多对多关系和 NSPredicate

    我有一个包含多对多关系的 CoreData 数据模型 事实证明 NSPredicate 不支持多对多关系 来自 CoreData pdf 谓词的键路径中只能有一个对多元素 作为食谱示例 许多食谱和许多成分 一份食谱可以有多种成分 其中 盐
  • 为什么 pytesseract 无法识别这个简单图像中的数字?

    我正在尝试使用 pytesseract 识别图像中的两个数字 我努力了 psm 6 up to 10 我努力了 c tessedit char whitelist 0123456789 以上均不返回49数字 我得到的最近的已返回4没有9 您
  • *通过共享* JavaScript 对象来测试深度相等

    在 JavaScript 中测试两个对象的深度相等这一主题已经有很多墨水了 然而 似乎没有人关心区分以下两个对象 var o1 var subitem var o2 subitem subitem var o3 大多数深度相等算法会说o1
  • 解析嵌入的CSS beautifulsoup

    是否可以从 html 标签中提取嵌入的 css 属性 例如 假设我想找出 s5 的垂直对齐属性是什么 我目前正在使用 beautifulsoup 并已检索了跨度标签tag soup find class s5 我试过了tag attrs c
  • 仅在第一次调用方法时调用该方法的块

    我有一个方法 在这个方法中我有一个块 public void method block instructions 但这个方法在我的程序中被调用了两次 我希望该块仅执行一次 并且仅在该方法第一次出现时执行 最好 最优雅的方式是什么 priva
  • NHibernate 和版本控制(时间戳)

    我得到了这个异常 在 System Convert ToDateTime 对象值 在 p nhibernate core src NHibernate Type DateTimeType cs 中的 NHibernate Type Date
  • 使用 mybatis 或 ibatis 的一对多关系

    我有一个有两个表的数据库 post id post name post desc files file id file name post attachments post id file id 在我的 xml 映射中我已经有了
  • 为什么此插件代码中的 CRM 2011 实体关系为空?

    这是我为 CRM 2011 编写的插件的工作示例 我已在插件注册工具中为此插件创建了 创建 步骤 这执行得很好 我还为该插件注册了一个 更新 步骤 由于返回的主要联系人为空 因此执行失败 这些步骤都注册为异步 using System us
  • 即使将鼠标悬停后也保持下拉菜单处于活动状态(可见)

    当我移动鼠标指针滚动到子菜单后 我的子菜单立即消失 感觉好像我把 CSS 搞砸了 经过几次尝试使其保持活跃后我无法弄清楚 我遵循了一些教程 看看它 他们称之为hover on the ul代替a 主播 我尝试了类似的方法 但无法达到我想要的
  • 从表列中的 SQL Server 日期值获取月份名称

    我想创建一个统计查询 显示每月的记录数 问题是我希望以字母形式显示月份 例如一月 二月 三月等 而不是像 1 2 或 3 那样 我没有使用字母表显示月份名称month getdate 我不知道如何进行转换 这是我的 SQL Server 查
  • TIMESTAMP 未按照蜂巢中镶木地板的预期表现

    I have parquet读取时的数据 TIMESTAMP列 使用 Spark 效果非常好 以下是样本记录 scala gt data select BATCH LOAD DATE limit 5 show BATCH LOAD DATE
  • JavaScript 的本地存储字符串存储在哪里?

    哪里localstorage字符串存储在操作系统上 它在 Firefox 的 Profile 文件夹中吗 是的 在 Firefox 中 它位于配置文件文件夹中的 webappsstore sqlite 文件中 See https devel
  • 将 one-hot 编码目标值映射到正确的标签名称

    我有一个标签名称列表 我枚举并创建了一个字典 my list b airplane b automobile b bird b cat b deer b dog b frog b horse b ship b truck label dic
  • python按钮点击后更改文本

    我想制作一个按钮 在每次单击后更改显示的文本 数字 并返回函数中定义的值 因为我想使用显示的变量 我创建了一个函数 每次点击后都会为 文本 添加 1 直到 4 和一个按钮 该代码不返回函数的值 按钮只有文本 1 2 3 或 4 import
  • 如何将 dateutil.relativedelta 对象转换为 datetime.timedelta 对象?

    如何将 dateutil relativedelta 对象转换为 datetime timedelta 对象 e g pip install python dateutil from dateutil relativedelta impor
  • 根据用户角色将收件人添加到失败和取消的 WooCommerce 电子邮件

    我希望能够根据用户在订购时的角色来更改接收 Woocommerce 电子邮件通知的人员 例如 如果用户以批发客户身份登录 则会收到不同的电子邮件通知 我找到了如何在新订单完成后使用以下命令更改它woocommerce email recip
  • 如何折叠listviewitem UWP中的子控件

    通用Windows平台 C 如何从代码隐藏中折叠 展开项目 MainListView listitem 的子列表视图 我还没有找到任何有效的东西 我想在 SelectionChanged 事件中执行此操作 XAML