微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight 学习笔记之【二】

六、数据转换

 

在Silverlight 中对任何绑定都可以实现数据转换,要实现数据转换,需要创建数据转换类并实现IValueConverter 接口的Convert ConvertBack 方法,当数据源传递给目标时调用 Convert 方法,反之则调用 ConvertBack 方法。    使用 IValueConverter 要引用 System.Windows.Data 命名空间。

如:

XAML文件

<UserControl xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"  x:Class="SilverlightApplication3.MyConverter"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
             xmlns:my1="clr-namespace:SilverlightApplication3" ---------转换类所在的命名空间
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <StackPanel.Resources>
                <my1:Converter x:Key="MyConverter "></my1:Converter>
            </StackPanel.Resources>
            <my:DatePicker Name="dp" Margin="5" FontSize="15" Width="200" Height="30" />
            <TextBlock Name="tbkDate" Width="180" Margin="5" FontSize="15" Height="30"
                       Text="{Binding Date,Mode=TwoWay,Converter={StaticResource MyConverter }}"></TextBlock>
        </StackPanel>
    </Grid>
</UserControl>

 

cs文件

namespace SilverlightApplication3
{
    public class Converter :IValueConverter
    {

        #region IValueConverter Members

        public object Convert(object value,Type targettype,object parameter,System.Globalization.CultureInfo culture)
        {
            return DateTime.Parse(value.ToString()).ToString("yyyy年MM月dd日");  
        }

        public object ConvertBack(object value,System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}

 

 

 

namespace SilverlightApplication3
{
    public partial class MyConverter : UserControl
    {
        Book book = new Book();

        public MyConverter()
        {
            InitializeComponent();
            dp.SelectedDateChanged += new EventHandler<SelectionChangedEventArgs>(dp_SelectedDateChanged);
            book.Date = DateTime.Now.ToLongDateString();
            tbkDate.DataContext = book;
        }

        void dp_SelectedDateChanged(object sender,SelectionChangedEventArgs e)
        {
            book.Date = this.dp.SelectedDate.ToString(); 
        }
    }
}

 

 

七、路由事件

 

Silverlight 中并非所有的输入事件都支持路由事件,它只针对于框架级别的输入事件:MouseLeftButtonDown,MouseLeftButtonUp,MouseMove,KeyDown,KeyUp,Gotfocus,LostFocus,BindingValidationError。

 

如果不希望引发 事件的目标对象产生路由事件,可以使用为事件数据类设置Handled属性,所有支持路由事件数据类都 支持Handled属性,如果设置Handled属性为true,Silverlight 将认为这个路由事件被标记为已处理,也就是说这个对象引发的路由事件将被忽略。

 

当路由事件产生向上冒泡机制时,你在引发事件对象的父对象事件处理程序中获取的sender 对象并不是引发该事件的对象,得到的sender 仍然是父对象本身,在这种情况下,Silverlight 提供了OriginalSource 属性,使用该 属性可以 在父对象的事件处理程序中直接 得到引发事件的原始对象

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐