vs2010 学习Silverlight学习笔记(9):使用用户控件(2)

概要:

  在上一篇中我们学会了如何创建用户控件,添加用户控件属性,动态添加用户控件。这一篇我们来一起研究一下
上篇我们遗留的两个问题。
   1.动态修改用户控件属性,即上面那个代码中get{}set{}为什么不能成功?怎样才能成功?
   2.能否动态卸载控件?

用户控件属性分析:

    比如上篇中的用户控件TextBlock的text属性。假如我们想让它像asp.net控件一样:没有设定的时候显示默认值,
设定后显示默认值。并且按照传统的自定义asp.net控件一样用get{}set{}设置。可是上篇中不成功,为什么呢?
  测试用例1:
    SilverlightControl1.xaml.cs代码:
代码
    
      
public string TextMessage
{
get
{
return this .txtb.Text;
}
set
{
if (TextMessage == "" )
{
this .txtb.Text = " 默认值 " ;
}
else
{
this .txtb.Text = value;
}
}


    MainPage.xaml代码:


   
     
< Grid x:Name ="LayoutRoot" Background ="White" >
< myControl:SilverlightControl1 x:Name ="myCon" ></ myControl:SilverlightControl1 >
</ Grid >

结果:
    TextBlock的text并没有改变,说明并没有执行上面SIlverlightControl1.xaml.cs的代码。
  测试用例2:
    SilverlightControl1.xaml.cs代码不变。
    MainPage.xaml代码:


   
     
< Grid x:Name ="LayoutRoot" Background ="White" >
< myControl:SilverlightControl1 x:Name ="myCon" TextMessage ="" ></ myControl:SilverlightControl1 >
</ Grid >

就加个TextMessage=""的属性,结果是:
    显示出来了,说明运行到了上面SilverlightControl1.xaml.cs的代码
  测试用例3:
    SilverlightControl1.xaml.cs代码不变。
    MainPage.xaml代码:


   
     
< Grid x:Name ="LayoutRoot" Background ="White" >
< myControl:SilverlightControl1 x:Name ="myCon" TextMessage ="设定值1" ></ myControl:SilverlightControl1 >
</ Grid >

这回TextMessage有值了,结果是:
    显示并不是设定的值,说明运行到上面SilverlightControl1.xaml.cs代码,但TextMessage并没有值。
  测试用例4:
    SilverlightControl1.xaml.cs代码不变。
    MainPage.xaml代码:

代码


    
      
< Grid x:Name ="LayoutRoot" Background ="White" >
< myControl:SilverlightControl1 x:Name ="myCon" TextMessage ="设定值1" ></ myControl:SilverlightControl1 >
< Button Content ="点击" Height ="23" HorizontalAlignment ="Left" Margin ="10,10,0,0"
Name
="button1" VerticalAlignment ="Top" Width ="75" Click ="button1_Click" />
</ Grid >

并在MainPage.xaml.cs代码:


   
     
private void button1_Click( object sender, RoutedEventArgs e)
{
myCon.TextMessage
= " 设定值2 " ;
}

结果:加载后
       点击button后
    说明点击button后,TextMessage接收到值。
  测试用例5:
    这个结果更有意思。
    SilverlightControl1.xaml.cs代码不变。
    MainPage.xaml代码,我们去掉TextMessage设定:

代码


    
      
< Grid x:Name ="LayoutRoot" Background ="White" >
< myControl:SilverlightControl1 x:Name ="myCon" ></ myControl:SilverlightControl1 >
< Button Content ="点击" Height ="23" HorizontalAlignment ="Left" Margin ="10,10,0,0"
Name
="button1" VerticalAlignment ="Top" Width ="75" Click ="button1_Click" />
</ Grid >

MainPage.xaml.cs代码不变。
    结果:
      加载后:

      点击一下后:
      
      再点击:

  总结:
    还做了几个例子我就不往上写了,感兴趣的自己可以试一下。
    1.Silverlight3在运行前,已经加载了用户控件,如果没有设置TextMessage,并不会触发get{}set{}。
    2.假如在MainPage里设置了TextMessage属性,则会触发get{}set{},但这时的TextMessage值并不会传递到
SilverlightControl里,即SilverlightControl里TextMessage值还是空的。
    3.假如设置了TextMessage,当再次设置TextMessage值时,就会将值传递到SilverlightControl里,即SilverlightControl里
TextMessage收到了值。
    上面是我大量实验的总结分析,不一定准确,但结果我们是可以预知一点了。Silverlight的运行机制估计就是这样了,实验的时候
vs2010错误重启好多此。因为我没有在国内外网站上找到相关的资料,我就先抛砖引玉了。

动态加载:

  上篇的动态加载,grid有个loaded事件,那个是要声明事件的Loaded="LayoutRoot_Loaded"。
今天就到这吧,明天继续学习Silverlight3.
总目录
上一篇:vs2010 学习Silverlight学习笔记(8):使用用户控件
下一篇:vs2010 学习Silverlight学习笔记(10):数据绑定


                            

你可能感兴趣的:(silverlight)