首页 新闻 会员 周边 捐助

WPF获取遍历控件的值

0
悬赏园豆:20 [已解决问题] 解决于 2012-03-21 11:28

for (int i = 0; i < counter; i++)
{
  Label lb = new Label();
  lb.Width = 50;
  lb.Height = 35;
  lb.FontFamily = new FontFamily("LiSu");
  lb.HorizontalAlignment = HorizontalAlignment.Left;
  lb.VerticalAlignment = VerticalAlignment.Bottom;
  lb.FontWeight = FontWeights.Bold;
  Canvas.SetTop(lb, i * (-2));
  lb.Background = Brushes.Transparent;
  lb.HorizontalContentAlignment = HorizontalAlignment.Center;
  lb.VerticalContentAlignment = VerticalAlignment.Center;

  canEAChip_Idle5.Children.Add(lb);
}

我用for循环动态添加Label,我要怎么获取每个Label的名称呢,我想给添加出来的Label加上背景。

路晚歌的主页 路晚歌 | 初学一级 | 园豆:3
提问于:2012-03-21 10:04
< >
分享
最佳答案
0

方法1,在创建的时候把Label保存在一个List中

方法2,遍历canEAChip_Idle5内的控件,然后判断是Label的话就加上背景

foreach (UIElement element in canEAChip_Idle5.Children) 
{
if (element is Label)
{
Label current = ((Label)element);

//设置背景

current.Background = Brushes.Transparent;
}
}



方法3,如果使用VisualTreeHelper的话,参考如下:

//定义扩展方法 
public static IEnumerable <DependencyObject> GetVisuals(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendants in child.GetVisuals())
{
yield return descendants;
}
}
}
//调用如下(将所有Control禁掉):
LayoutRoot.GetVisuals().OfType <Control>().ToList().ForEach(item =>
{
item.IsEnabled = false;
});
收获园豆:20
LCM | 大侠五级 |园豆:6876 | 2012-03-21 10:19

遍历出来的第二个Label的名称怎么表示,因为我这每个Label的背景都不是固定的,所以判断起来很麻烦。

路晚歌 | 园豆:3 (初学一级) | 2012-03-21 10:36

@路晚歌: 你没有必要知道第二个Label的名称吧。你这样就能知道是第几个Label了

int i=0;
foreach (UIElement element in canEAChip_Idle5.Children)
{
if (element is Label)
{
i++;
if(i==1)//这里等于几就是设置第几个label
{
Label current = ((Label)element);
//设置背景
current.Background = Brushes.Transparent;
}
}
}
LCM | 园豆:6876 (大侠五级) | 2012-03-21 10:45
其他回答(2)
1

string lablbEAChip_Idle = "lbEAChip_Idle";
            int intlbEAChip_Idle=lablbEAChip_Idle.Length;
            foreach (UIElement element in canEAChip_Idle5.Children)
            {
                Label labn = element as Label;
                if(labn!=null){
                    string name = labn.Name;
                    int i =int.Parse( name.Substring(intlbEAChip_Idle));
                }
            }

這個代碼 已經找到label了。想怎麼操作 都好了。昨天 都回答了你了。還不明白?

Label labn = element as Label;

無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-21 10:13

额,我只是不知道后面怎么搞,你能不能帮忙写一个出来我下,比如给第一个label添加一个背景,WPF才学没多久,不好意思!

支持(0) 反对(0) 路晚歌 | 园豆:3 (初学一级) | 2012-03-21 10:17

@路晚歌:   Label labn = canEAChip_Idle5.Children[0] as Label;

if(labn!=null){

labn .Background = Brushes.Transparent;
}
支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-21 10:21
0

根本捕捉不到lable啊

IT英雄 | 园豆:202 (菜鸟二级) | 2017-10-27 21:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册