Silverlight 5 beta新特性探索系列:7.结合上层元素属性绑定和Style Setter上的绑定

简介:

在Silverlight 5中添加了相对上层元素属性的绑定,还有Style Setter也可以绑定数据。

        一、相对上层元素属性的绑定

       它是在元素内部的子孙级元素中的某一些属性可以绑定为祖先级元素的某一些属性。比如说再一个ListBox的Tag元素值为:“这是第一个父级绑定”,在ListBox.Templete下面添加一个TextBlock元素的Text属性设置为 <TextBlock Text="{Binding Tag,RelativeSource={RelativeSource  AncestorType=ListBox,AncestorLevel=1}}"/>,这样子当ListBox有数据集合的时候显示的数据行就是值“这是第一个父级绑定”。

         下面我们来看完整的XAML源码(MainPage.xaml):

复制代码

  
  
< ListBox Tag = " 这是第一个父级绑定 " Name = " listBox1 " Margin = " 100,50,169,221 " >
< ListBox.ItemTemplate >
< DataTemplate >
< StackPanel >
< TextBlock Text = " {Binding Tag,RelativeSource={RelativeSource
AncestorType = ListBox,AncestorLevel = 1 }} " />
</ StackPanel >
</ DataTemplate >
</ ListBox.ItemTemplate >
</ ListBox >
复制代码
        接下来我们看后台代码(MainPage.xaml.cs代码):
复制代码

  
  
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
// 设置当前listBox1的数据源
this .listBox1.ItemsSource = new List < Person > (){
new Person(){ Name = " 张三 " },
new Person(){ Name = " 李四 " },
new Person(){ Name = " 王五 " },
new Person(){ Name = " 刘六 " }
};
}
}
/// <summary>
/// 实体类Person
/// </summary>
public class Person
{
string _Name;

public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
复制代码

        运行程序我们可以看到效果图如左图,而非右图,

      

        二、Style Setter的绑定

        准备一个Style样式的源类TBTheme,此类中有多个属性,这些属性是一些样式的颜色,文字大小之类的。将此类引入到App.xaml文件中,然后再App.xaml中的Style Setter绑定这个源类TBTheme,并且设置需要绑定的源类中的某个属性。当鼠标单击此TextBlock的时候切换绑定的属性的值。其步骤分为四步。

             第一步:引入TBTheme类设置其key为tbTheme

             第二步:设置绑定到TBTheme类下面的TextBrush字段(App.xaml中代码如下)

复制代码

  
  
< Application xmlns = " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
xmlns:x
= " http://schemas.microsoft.com/winfx/2006/xaml "
x:Class
= " SL5BindInStyle.App "
xmlns:local
= " clr-namespace:SL5BindInStyle "
>
< Application.Resources >
<!-- 第一步:引入TBTheme类设置其key为tbTheme -->
< local:TBTheme x:Key = " tbTheme " />
<!-- 第二步:设置绑定到TBTheme类下面的TextBrush字段 -->
< Style x:Key = " NormalText " TargetType = " TextBlock " >
< Setter Property = " FontFamily " Value = " Comic Sans MS " />
< Setter Property = " FontSize " Value = " 12 " />
< Setter Property = " Foreground " Value = " {Binding TextBrush,
Source = {StaticResource tbTheme}} " />
</ Style >
</ Application.Resources >
</ Application >
复制代码

             第三步:获取到需要绑定设置的字体颜色(TBTheme.cs代码如下)

复制代码

  
  
using System.ComponentModel;
namespace SL5BindInStyle
{
public class TBTheme : INotifyPropertyChanged
{
// 标志符,标志当前是什么颜色
bool Flag;
public TBTheme()
{
// 初始化类
Flag = true ;
GetOtherColor();
}
public event PropertyChangedEventHandler PropertyChanged;
private Brush _textBrush;
/// <summary>
/// 字体颜色
/// </summary>
public Brush TextBrush
{
get { return _textBrush; }
set
{
_textBrush
= value;
if (PropertyChanged != null )
PropertyChanged(
this , new PropertyChangedEventArgs( " TextBrush " ));
}
}
/// <summary>
/// 第三步:获取其他颜色
/// </summary>
public void GetOtherColor()
{
if (Flag)
{
TextBrush
= new SolidColorBrush(Colors.Blue);
Flag
= false ;
}
else
{
TextBrush
= new SolidColorBrush(Colors.Green);
Flag
= true ;

}
}
}
}
复制代码
             第四步:每次点击textBlock1就更换一次字体颜色(MainPage.xaml.cs代码)

  
  
// 第四步:每次点击textBlock1就更换一次字体颜色
private void textBlock1_MouseLeftButtonDown( object sender, MouseButtonEventArgs e)
{
(Application.Current.Resources[
" tbTheme " ] as TBTheme).GetOtherColor();
}
       MainPage.xaml的主代码如下,TextBlock绑定全局静态资源App.xaml中的key为NormalText样式:

  
  
< TextBlock x:Name = " textBlock1 " Text = " 可以动态改变颜色的TextBlock "
Style
= " {StaticResource NormalText} " Margin = " 100,0,169,456 "
MouseLeftButtonDown
= " textBlock1_MouseLeftButtonDown " ></ TextBlock >

        最后我们来看看点击TextBlock前后的照片如下图,如需源码请点击 SL5BindInStyle.zip 下载。

点击前效果:   点击后效果:



本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/04/22/2023732.html,如需转载请自行联系原作者


相关文章
收集的几个国外在线接收短信验证码的网站
有时候,在某些平台上,我们可能需要注册一个临时账号。而注册过程中又需要输入手机号进行短信验证,但是我们又不想泄露隐私,所以这时候一些临时短信接收服务便派上了用场。以下收集的网站都是在线提供一些国外手机号,当你需要进行短信验证的时候(比如注册某个账号),这时你可以使用网站上的提供手机号进行接码,网站上会公开短信的所有内容。
43544 0
|
弹性计算 Cloud Native Devops
云效DevStudio体验
阿里云中提供了在线编辑工具DevStudio,让开发更加便捷。
2361 0
云效DevStudio体验
|
机器学习/深度学习 数据采集 测试技术
Toad:基于 Python 的标准化评分卡模型(上)
在信贷的风控模型中最常用、最经典的可能要属评分卡了,所谓评分卡就是给信贷客户进行打分,按照不同业务场景可为贷前、贷中、贷后和反欺诈,一般叫做ABCF卡。模型得到分数,通过设置cutoff阈值给出评估结果,结果可直接用于通过或拒绝,或者用于策略应用。
2531 0
Toad:基于 Python 的标准化评分卡模型(上)
|
并行计算 算法 编译器
使用 prange 实现 for 循环的并行
使用 prange 实现 for 循环的并行
391 1
使用 prange 实现 for 循环的并行
|
分布式计算 大数据 Spark
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
《Spark大数据处理:技术、应用与性能优化》深入浅出介绍Spark核心,涵盖部署、实战与性能调优,适合初学者。作者基于微软和IBM经验,解析Spark工作机制,探讨BDAS生态,提供实践案例,助力快速掌握。书中亦讨论性能优化策略。[PDF下载链接](https://zhangfeidezhu.com/?p=347)。![Spark Web UI](https://img-blog.csdnimg.cn/direct/16aaadbb4e13410f8cb2727c3786cc9e.png#pic_center)
384 1
Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
813 6
|
NoSQL 关系型数据库 MySQL
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
不同系统下进行MySQL安装、MongoDB安装、Redis安装【2月更文挑战第5天】
742 5
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
|
Java Linux Apache
Maven的Binary与Source区别
Maven的Binary与Source区别
382 1
|
弹性计算 关系型数据库 MySQL
在云服务器ECS上搭建个人网站
本实验帮助您快速了解云上应用的构建方式,同时通过您可以采取的工具、方法和可操作步骤,以帮助您了解如何便捷的搭建属于自己的云上应用。
|
XML Java Android开发
Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)
Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)
621 0