六、数据转换
在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] 举报,一经查实,本站将立刻删除。