类型转换

由于XAML是基于文本格式,因此string类型的属性,比较适合,并且XAML语言也确实这样做的。

<Rectangle

                 Width="200"

                 Height="40"

                 Stroke="Black"

                 Fill="Red"

/>

但是,Width和Height是Double类型,Stroke和Fill是Brush类型,他们是如何转换成相对应的类型,并编译的那?答案是TypeConverter类型转换系统,它实现了string类型与源类型之间的转换。

Width和Height属性使用LengthConverter类型转换

Brush属性使用BrushConverter类型转换

例如

Color类型转换为SolidColorBrush

[ValueConversion(typeof(Color), typeof(SolidColorBrush))]
public class ColorBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Color color = (Color)value;
        return new SolidColorBrush(color);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

然后我们可以在资源中定义一个ColorBrushConverter 实例(src是一个自定义命名空间,引入了ColorBrushConverter 类所在的Assembly)。

<Application.Resources>
  <src:ColorBrushConverter x:Key="ColorToBrush"/>
</Application.Resources>

最后使用这个自定义的类型转换器:

<DataTemplate DataType="{x:Type Color}">
  <Rectangle Height="25" Width="25" Fill="{Binding Converter={StaticResource ColorToBrush}}"/>
</DataTemplate>

自定义类型转换器,参见http://msdn.microsoft.com/zh-cn/library/bb546926(v=vs.90).aspx

posted @ 2012-02-25 15:01  挑战  阅读(201)  评论(0编辑  收藏  举报