silverlight技巧 用xamlreader读写XAML页面.

这次给大家晒晒 silverlight 用户控件的另一种写法xamlreader.

是不是有些朋友想过在 silverlighter 里使用 aps.net 里面的 response.write(); 方法输出HTML代码那样输出 XAML 代码呢? 呵呵这里我就给大家晒晒如何实现吧~

首先我要帮大家引入一个对象 他位置与 System.Windows.Markup; 命名空间下. 这里有一个静态类XamlReader,以及read方法 我们就要用他来创建我们的usercontrol.

  
  
  
  
  1. // Summary: 
  2. //     Provides a XAML processor engine for parsing XAML and creating corresponding 
  3. //     Silverlight object trees. 
  4. public static class XamlReader 
  5.     // Summary: 
  6.     //     Parses a well-formed XAML fragment and creates a corresponding Silverlight 
  7.     //     object tree, and returns the root of the object tree. 
  8.     // 
  9.     // Parameters: 
  10.     //   xaml: 
  11.     //     A string that contains a valid XAML fragment. 
  12.     // 
  13.     // Returns
  14.     //     The root object of the Silverlight object tree. 
  15.     public static object Load(string xaml); 

 了解这个对象后给大家一个实例看看怎么用吧~ 还是很简单的,

 1. 我们创建一个类 自然就是我们的 usercontrol 了 继承自 control

 2. 我们要把我们模板的 Xmal 以string 的形式保存写入程序中

 3. 我们要在构造函数中载入这些 XAML

 4. 我们在重载onapplytemplate() 方法中声明创建的对象XMAL代码.

 以下是我要写入的Xaml;

  
  
  
  
  1. public class MyImage : Control 
  2.     { 
  3.         Image _myImage = null
  4.         private const string _contentTemplate 
  5.             = "<ControlTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"" + 
  6.               "xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">" + 
  7.               "<Image x:Name=\"sonicImage\" Source=\"space.jpg\"></Image>" + 
  8.               "</ControlTemplate>"
  9.     } 

构造函数

  
  
  
  
  1. public MyImage() 
  2.         { 
  3.             Template = (ControlTemplate)XamlReader.Load(_contentTemplate); 
  4.             ApplyTemplate(); 
  5.         } 

重载onapplytemplate

  
  
  
  
  1. public override void OnApplyTemplate() 
  2.     _myImage = (Image)GetTemplateChild("sonicImage"); 

这样我们就可以更灵活的使用我们的用户控件,很简单吧~ 希望这点技巧对你有所帮助^^

Source code: XamlReader_Demo

 

你可能感兴趣的:(silverlight)