微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XamlReader.Load Silverlight 程序动态创建添加UI元素

本来蛮简单的一个用法,却在实用中折腾了半天,原因就一个属性没写xmlns='http://schemas.microsoft.com/client/2007',否则就一直报错,不知所以,正确用法为:

Xaml代码为:
            string _Xaml=
                "<PathGeometry  xmlns='http://schemas.microsoft.com/client/2007'>" +
                "<Pathfigure StartPoint='0,0'>" +
                "<Linesegment />" +
                "</Pathfigure>" +
                "</PathGeometry>";
PathGeometry myGEO= XamlReader.Load(xaml) as PathGeometry;

解决一个问题:
如果需要引用动态创建的控件,需要注意不能在XAML代码中使用x:Name属性,通过为其指定Name属性,并使用FindName方法,就可以完成对动态创建的控件的引用。

我们都知道XAML标签元素在silverlight运行时被转换成相应的对象;这篇文章将告诉大家在程序运行时,如何动态添加UI元素(对象)。

通过对象来创建UI元素

C#代码
  1. Rectangle rc;   
  2. rc = new Rectangle();   
  3. //改变Rectangle的属性(到目前位置,我们还未设置任何要显示内容  
  4. rc.Width=20;rc.Fill = new SolidColorBrush(Colors.Red);   
  5. //改变附加属性(attached properties),必须使用SetValue方法  
  6. //rectangle离画布左边距离为200PX   
  7. rc.SetValue<double>(Canvas.LeftProperty,200);   
  8. //添加把rc对象做为子对象添加到画布(和asp.net页的控件树的道理相拟)   
  9. this.Children.Add(rc);  

通过XAML创建UI元素

通过XamlReader类的Load方法,动态创建UI元素:

  1. 指定一条XAML内容字符串;
  2. 通过XamlReader.Load方法把元素在内存中编译(这样就可以得到UI元素对象的引用,也有可能是null,或者报错);
  3. 最后把它添加到容器的子控件中。


例如:在(X,Y)处创建一个大小为(W,H)的红色rectangle:

C#代码
  1. string xamlStr ="<rectangle Canvas.Left=/""+X+"/" Canvas.Top=/"+Y+"/""  
  2.                  + " Width=/""+W+"/" Height=/""+H+"/""  
  3.                  + " Fill =/"Red/" />";   
  4. try{   
  5. Rectangle rc = (Rectangle)XamlReader.Load(xamlStr);   
  6. this.Children.Add(rc);   
  7. ...   
  8. }   
  9. catch(Exception ex ){   
  10. ...   
  11. }  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐