关于silverhight中动态添加itemcontrol时"值不在预期的范围内" 的一个问题

最近讲原wpf开发的项目转silverhight ,碰到个挠头的问题:wpf代码移植到silverhight后一直提示"值不在预期的范围内",在网上查了各种资料各种改,都无效,郁闷的要砸电脑!~

具体如下:

动态增加TabControl的选项卡TabItem,并填充label / image 等控件.

wpf中执行无问题,代码如下:

            TabItem tt = new TabItem(); //TabItem
            tt.IsSelected = isSelected;
            tt.Header = this._title;
            tt.Uid = tt.Name = "tab_" + this._id;
                //动画形式显示
                Viewbox _vb = new Viewbox();    //ViewBox元素可使子元素自动缩放
                _vb.Name =  "vbox_" + this._id;
                _vb.Stretch = Stretch.Uniform;
                tt.Content = _vb;
                //添加容器Canvas
                 Canvas _c = new Canvas();   //Canvas
                _c.Uid = _c.Name = "can_" + this._id;
                _c.Width = 1280;
                _c.Height = 720;
                _vb.Child = _c;
                //添加地图
                Image _imgMap = new Image();
                _imgMap.Name  ="imgMap";
                _imgMap.Source = BaseMethod.GetImage(this._mapPath);
                _imgMap.ToolTip = _imgMap.Name;
                //_imgMap.Stretch = Stretch.Uniform;
                _imgMap.Width = _c.Width;
                _imgMap.Height = _c.Height;
                Canvas.SetLeft(_imgMap, 0);
                Canvas.SetTop(_imgMap, 0);
                _c.Children.Add(_imgMap);
                //添加Element
                this._elements.ForEach(delegate(MElement _el) {
                    if (null == _el.MyPoint)
                    {
                        _el.MyPoint = new Point(5, 5);
                    }
                    CElementUI _ceui = new CElementUI(_el);
                    _ceui.CEUDrawing(ref _c);
                });
                //创建动画计时器
                #region 创建动画计时器
                DispatcherTimer _AnimationTimer = new DispatcherTimer();
                _AnimationTimer.Interval = TimeSpan.FromMilliseconds(150);
                _AnimationTimer.Tick += new EventHandler(delegate(object sender, EventArgs e)
                {
                   //各种状态下的颜色变换
                    this._elements.ForEach(AnimationChangeCEUIColor);
                    _bChangeColor = !_bChangeColor;
                    //变换图片(图片动画)
                });
                _AnimationTimer.Start();

#endregion

以上转为silverhight后,死活不行,无法创建tabitem以及控件.错误提示"值不在预期的范围内",详细如下:

   位于 MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
   位于 MS.Internal.XcpImports.MethodPack(IntPtr objectPtr, String methodName, Object[] rawData)
   位于 MS.Internal.XcpImports.Collection_Add[T](PresentationFrameworkCollection`1 collection, Object value)
   位于 System.Windows.PresentationFrameworkCollection`1.AddImpl(Object value)
   位于 System.Windows.Controls.ItemCollection.AddImpl(Object value)
   位于 System.Windows.Controls.ItemCollection.AddInternal(Object value)
   位于 System.Windows.PresentationFrameworkCollection`1.Add(T value)
   位于 PersonnelOrientation.MainPage..ctor()


**************************

查了N久,试了N多方法,都无效....苦恼,郁闷!~~ 无意中,一个小灵感却把问题解决了:所有的控件Name属性都加上个变量,保证不重复... 成功!


总结如下(未必正确,如有错误欢迎您指正):

wpf中动态向容器(Canvas等)添加控件时,不同容器中控件的name/uid等属性可以重复,如上面我的image控件name属性均为"imgMap",系统可以自动识别;而silverhight中却不可以,容器似乎无法标识其中的控件,因此任何控件的name属性必须无重复,在动态创建时,必须保证各控件name的唯一性,无论控件是否在同一容器中.


另:微软的大佬们,这个"值不在预期的范围内"的提示让人挠头哇,为了广大劳动人民,能给具体不快哭了


email: azjcdy@163.com



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值