wpf 遍历listbox的Item

<StackPanel>
                        <ListBox Width="400"
                             Height="300" x:Name="describeString" ItemTemplate="{DynamicResource ListBoxTemplate}"  />
                    </StackPanel>
        <DataTemplate x:Key="ListBoxTemplate">
            <Grid MinWidth="79">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="5"></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>

                </Grid.ColumnDefinitions>

                <TextBlock 
                       Grid.Column="1"
                       Text="{Binding SampleName}" 

                    TextWrapping="Wrap"
                    MouseDown="TextBlock_MouseDown"
                       HorizontalAlignment="Center"  
                       VerticalAlignment="Center"
                       />

            </Grid>
        </DataTemplate>

List blocks = FindFirstVisualChild(this.describeString);

 //遍历指定容器,根据控件名,返回适配的控件集合
        public List<T> FindFirstVisualChild<T>(DependencyObject obj) where T : DependencyObject
        {
            List<T> childList = new List<T>();

            //遍历指定容器
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is T)
                {
                    childList.Add((T)child);
                }
                //如果不存在,则继续遍历指定容器的子容器(则如果指定容器的子容器也就是第二层,遍历存在匹配的控件则跳出。不再遍历其第三层,继续遍历第二层)
                else
                {
                    List<T> t2 = FindFirstVisualChild<T>(child);
                    if (t2 != null && t2.Count > 0)
                    {
                        foreach (T t in t2)
                        {
                            childList.Add(t);
                        }
                    }
                }
            }

            return childList;
        }

根据名称查找

        //遍历指定容器,根据控件名,返回适配的控件集合
        public List<T> FindFirstVisualChild<T>(DependencyObject obj, string childName) where T : DependencyObject
        {
            List<T> childList = new List<T>();

            //遍历指定容器
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is T && child.GetValue(NameProperty).ToString() == childName)
                {
                    childList.Add((T)child);
                }
                //如果不存在,则继续遍历指定容器的子容器(则如果指定容器的子容器也就是第二层,遍历存在匹配的控件则跳出。不再遍历其第三层,继续遍历第二层)
                else
                {
                    List<T> t2 = FindFirstVisualChild<T>(child, childName);
                    if (t2 != null && t2.Count > 0)
                    {
                        foreach (T t in t2)
                        {
                            childList.Add(t);
                        }
                    }
                }
            }

            return childList;
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值