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 下载。

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

目录
相关文章
|
存储 SQL 缓存
MySQL 中一条 SQL 查询语句的执行过程
`SELECT id FROM table_a where id = 10` 这条 SQL 从执行到最后结果返回你知道都经历了哪些步骤么?
MySQL 中一条 SQL 查询语句的执行过程
|
SQL 人工智能 自然语言处理
【2023云栖】田奇铣:大模型驱动DataWorks数据开发治理平台智能化升级
随着大模型掀起AI技术革新浪潮,大数据也进入了与AI深度结合的创新时期。2023年云栖大会上,阿里云DataWorks产品负责人田奇铣发布了DataWorks Copilot、DataWorks AI增强分析、DataWorks湖仓融合数据管理等众多新产品能力,让DataWorks这款已经发展了14年的大数据开发治理平台产品,从一站式向智能化不断升级演进。
59877 8
|
数据可视化
R语言离散时间马尔可夫链(Markov chain)模型分类案例可视化分析
R语言离散时间马尔可夫链(Markov chain)模型分类案例可视化分析
|
设计模式
设计模式-简单工厂和工厂方法
设计模式-简单工厂和工厂方法
|
SQL Java API
谷粒商城 前置学习
谷粒商城 前置学习
148 0
|
Oracle 关系型数据库 Linux
DM8重做日志文件和归档管理
重做日志文件,用来保存redo日志,redo日志默认2个,循环使用,不断覆盖,联机日志由系统自动切换,不能手动切换,联机日志过小,会制造日志频繁切换,过大则浪费磁盘空间。
DM8重做日志文件和归档管理
|
运维 架构师 分布式数据库
OBCE 数据库认证大师重磅发布! 前 10 名报考学员免费考试!
OBCE 认证主要面向数据库架构师以及运维专家。作为 OceanBase 认证体系中的最高级别认证,OBCE 认证是对技术、知识和操作技能的最高级别认可。
OBCE 数据库认证大师重磅发布! 前 10 名报考学员免费考试!
|
机器学习/深度学习 算法
[leetcode] 鸡蛋掉落 Google面试题 dp
给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。 请你计算并返回要确定 f 确切的值 的 最小操作次数 是多少?
306 0
[leetcode] 鸡蛋掉落 Google面试题 dp
|
Java 数据库连接 SQL
【面小易-面经12】阿里巴巴Java方向面试题汇总(含答案)
从前几篇分享中能够看出,阿里不愧是“Java技术光明顶”,无论是从Java方向的面经数量、质量,还是问题难度上来看,想要拿到阿里Java研发岗位的Offer,都需要面试者拥有对于Java相关基础知识的深厚“内功”。本文中为大家汇总了部分阿里巴巴Java方向面试中的常见问题,希望能够帮助大家查漏补缺。
38231 0