精通Silverlight——12.6.3 从XAML代码中创建控件

来源:互联网 发布:四通铜灯淘宝 编辑:程序博客网 时间:2024/05/04 02:35

  还可以直接从XAML代码片段中动态创建控件,通过使用XamlReader类的Load方法,该方法需要一个字符串类型的XAML代码片断。XamlReader.Load方法将在内存中创建控件,如果创建成功,将返回一个Object类型的引用,通过类型转换变为所需的类型。如果创建失败否则返回null。下面的示例代码使用XAML代码创建一个矩形,如下所示:

using System;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Ink;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

namespace CreateUIFromXAMLSnippt

{

    public partial class Page : Canvas

    {

        Rectangle rc1;

        public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

            CreateRectangleFromXAML(100, 100, 200, 200);

            //如果需要引用动态创建的控件,需要使用FindName.

            rc1 = this.FindName("rc1") as Rectangle;

            rc1.MouseLeftButtonDown += new MouseEventHandler(rc1_MouseLeftButtonDown);

        }

        //定义矩形的单击行为

        void rc1_MouseLeftButtonDown(object sender, MouseEventArgs e)

        {

            rc1.Fill = new SolidColorBrush(Colors.Blue);

        }

        //XAML代码中动态创建矩形

        private void CreateRectangleFromXAML(double X,double Y,double W,double H)

        {

            //XAML代码

            string s = "<Rectangle Name='rc1' Canvas.Left='" + X + "' Canvas.Top='" + Y + "' "+ "Width='" + W + "' Height='" + H + "' Fill='Red' />";

            //使用XamlReader类创建矩形

            Rectangle rc = (Rectangle)XamlReader.Load(s);

            //添加到根画布中

            this.Children.Add(rc);

        }

    }

}

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

原创粉丝点击