[code=XAML]
<ListBox Name="myListBox" >    
     <ListItemBoxItem>
         <Image Source="1.jpg" Tag="1"></Image>
     <ListemBoxItem>
<ListBox> 
[/code]
如何取出Image的Tag值1?
请高手指点,在线等,顶的一样散分

解决方案 »

  1.   


                ListBoxItem lbi = myListBox.Items[0] as ListBoxItem;
                if (lbi != null)
                {
                    Image img = lbi.Content as Image;
                    if (img != null)
                        MessageBox.Show(img.Tag.ToString());
                }
      

  2.   

    你要是用绑定把每个ListBoxItem都绑定到那个类上的,可以通过as转换成那个类,
    一个通用的方法:
    参数:你选中的ListBoxItem
    返回值:ListBoxItem内所包含的Image
    public childItem FindVisualChild<childItem>(DependencyObject obj)
           where childItem : DependencyObject
            {
                if (obj == null)
                {
                    return null;
                }
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                    if (child != null && child is childItem)
                        return (childItem)child;
                    else
                    {
                        childItem childOfChild = FindVisualChild<childItem>(child);
                        if (childOfChild != null)
                            return childOfChild;
                    }
                }
                return null;
            }
    当然,以上的方法只能在只有一个Image的情况下适用,要想找到任意一个控件,则需要指定Name
    用一下方法:
    public object FindChildElementByName(DependencyObject obj, String name)
            {
                if (obj == null) 
                    return null;
                object oname = obj.GetValue(Control.NameProperty);
                if (oname != null && oname.ToString().Equals(name))
                {
                    return obj;
                }
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                {
                    object obj_1 = FindChildElementByName(VisualTreeHelper.GetChild(obj, i), name);
                    if (obj1 != null)
                    {
                        return obj_1;
                    }
                }
                return null;
            }
      

  3.   

    如果你是通过绑定到一个类的集合的话,只要通过as转就可以了
    例如:
    List<A> list = new List<A>();
    listBox.ItemSource = list;可以A a = ListBox.SelecetItem as A;if(null != a)
    {
    这样可以访问A中的任意属性
    }ListBox绑定在一个集合上有时候是很必要的,不同的集合类型,可以自己实现很多功能,例如自动排序等等;