当前位置:  开发笔记 > Android > 正文

Silverlight ItemsControl.你能通过模板完全拆除面板吗?

如何解决《SilverlightItemsControl.你能通过模板完全拆除面板吗?》经验,为你挑选了1个好方法。

我的ItemsControl有一个DataTamplate,它只包含一个带有其他元数据的Image.我想要做的是绑定到ItemsControl并使用Convas.Left和Canvas.Top显示图像,它通过我给出的数据绑定.

我一直在努力通过ItemsPanelTemplate从控件中删除任何Panels,所以我可以在父画布中使用Attached Properties,但是看起来你总是会默认得到一个StackPanel.

那里有人有什么好主意吗?

谢谢,戴夫



1> Peter McG..:

ItemsControl中项目的布局通过ItemsControl.ItemsPanel属性控制,该属性的类型为ItemsPanelTemplate.ItemsControl.ItemsPanel属性的默认值确实是ItemsPanelTemplate的一个实例,它指定了StackPanel,但这是完全可自定义的.

代码示例(在此MSDN页面上)显示在开头的段落下面"以下示例创建ItemsControl".在了解ItemsControl.Template,ItemsControl.ItemsPanel和ItemsControl.ItemTemplate属性的用途方面非常有用.

有几种方法可以实现您在问题第一段的第二句中所描述的内容.这是一个完整的例子:

Page.xaml:



    
        
            
                

                
                    
                    

                    
                        
                    
                
            
        
    

    
        
            
                
                
            
        

        
            
            
            
            
            
        
    

Country.cs:

using System.ComponentModel;
using System.Windows;

namespace ItemsControlImages
{
    public class Country : INotifyPropertyChanged
    {
        private string title;
        private string flagImage;
        private Point location;

        public string Title
        {
            get
            {
                return this.title;
            }
            set
            {
                if ((object.ReferenceEquals(this.title, value) != true))
                {
                    this.title = value;
                    this.RaisePropertyChanged("Title");
                }
            }
        }

        public string FlagImage
        {
            get
            {
                return this.flagImage;
            }
            set
            {
                if ((object.ReferenceEquals(this.flagImage, value) != true))
                {
                    this.flagImage = value;
                    this.RaisePropertyChanged("FlagImage");
                }
            }
        }

        public Point Location
        {
            get
            {
                return this.location;
            }
            set
            {
                if ((this.location.Equals(value) != true))
                {
                    this.location = value;
                    this.RaisePropertyChanged("Location");
                }
            }
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler propertyChanged = this.PropertyChanged;

            if (propertyChanged != null)
            {
                propertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion
    }
}

这就是您需要的所有内容(以及Images文件夹中的图像),以获得最终结果:

alt text http://www.freeimagehosting.net/uploads/bec683b75e.png

请注意,即使图像位于ItemsControl中,它们也会定位在显示的坐标处,方法是将其父Canvas的Left和Top附加属性绑定到自定义Location属性的X和Y坐标值.

有关此示例的更多信息以及通常使用模板自定义ItemsControl,您可以查看此博客文章.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有