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):数据绑定

posted @ 2010-05-10 22:55  耀哥  阅读(2667)  评论(0编辑  收藏  举报