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