zoukankan      html  css  js  c++  java
  • Silverlight DataBinding Converter:根据binding对象调整显示

    Silverlight DataBinding Converter:根据binding对象调整显示


      我希望写一系列关于Silverlight DataBinding的文章,分别讲解Silverlight Binding中不同的功能。本文将会讲的是DataBinding中使用Converter。演示的demo是根据值显示一个小图标,当slider数值小于50的时候,显示绿色,当数值大于等于50时,显示红色。

      本文中所有代码都可以在github中查看,git版本中采用了master-dev的方式。在master中可以查看每一个demo的最后完成,在dev中可以查看每一步的代码。

      github地址:git@github.com:kiwiwin/silverlight-demo.git。文件夹名称databinding-converter-demo

      1.首先定义显示界面

     <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">

               <Slider Height="23" HorizontalAlignment="Left" Width="120" Name="slider" VerticalAlignment="Center"

                        Minimum="0" Maximum="100" />

               <Image Height="30" Width="30" Margin="5,0,0,0"

                      Source="Images/green.png" />

     </StackPanel>

      注意Image中的Source值为Images/green.png,只是因为我在Images下面放置了两个图片green.png和red.png作为演示用

      2.让Image binding到slider value

      这里需要首先让Image的Sourcebinding到Slider的Value上,ElementName赋值为slider,就让slider成为Image source的binding source,然后将Path赋值为Value,即binding到slider的Value属性上。

      Source="{Binding ElementName=slider,Path=Value}"

      3.slider value转化到imagesource string

      Source需要的是一个字符串指向图片的来源,而slider.Value只是一个double型的属性,这就需要进行转换,就用到了databinding中的converter属性。

      首先,添加一个类,用于作转换:

    namespace databinding_converter_demo
    {
        public class ColorToPicture : IValueConverter 
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                double num = (double)value;
                return num < 50 ? "Images/green.png" : "Images/red.png";
            }

            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }

      实现binding转换需要实现一个类,实现IValueConverter接口,而IValueConverter定义了两个接口,Convert和ConvertBack,Convert用于讲source转换成target的binding转换,而ConvertBack反之。因为这里我们不需要ConvertBack,所以不实现它。

      4.在xaml中引入converter

      在xaml中添加一个local的namespace。并且定义UserControl.Resources指明ColorToPicture

    <SPAN style="FONT-FAMILY: SimSun"> mlns:local="clr-namespace:databinding_converter_demo"

     

       <UserControl.Resources>

           <local:ColorToPicture x:Key="ColorToPicture" />

       </UserControl.Resources>
    </SPAN>

      注意local:ColorToPicture的key是ColorToPicture

      再修改Image Source:

    <Image Height="30" Width="30" Margin="5,0,0,0"

                       Source="{BindingElementName=slider, Path=Value, Converter={StaticResourceColorToPicture}}" />

      显示结果:

      slider小于50:

      

      slider大于50:

      

      本文来自kiwi_coder的博客,原文地址:http://blog.csdn.net/kiwi_coder/article/details/8097018

  • 相关阅读:
    BZOJ5302: [Haoi2018]奇怪的背包
    BZOJ5303: [Haoi2018]反色游戏
    UOJ#217. 【UNR #1】奇怪的线段树(广义线段树性质+上下界最小流)
    Codeforces 702F T-Shirts(平衡树+复杂度分析)
    满足决策单调性的 DP 的通用做法
    JZOJ 6754. 2020.07.18【NOI2020】模拟T3 (树链剖分+分治+闵科夫斯基和)
    JZOJ 6756. 2020.07.21【NOI2020】模拟T2 (搜索有用状态+背包dp)
    JZOJ 6757 2020.07.21【NOI2020】模拟T3 (至少容斥+OGF+NTT)
    线性规划转对偶问题
    GDOI 2020 赛前反思
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3436504.html
Copyright © 2011-2022 走看看