Silverlight Tip(6)
去年曾经写过几篇关于Silverlight的一些小技巧,主要是对工作中遇到的问题的一个解决思路,本篇整理出其中经常遇到的几个问题
1.ColorExtension
相信习惯用XAML的程序员经常会被这个问题苦恼着,明明Xaml里面可以智能提示的Color,用C#居然没有.见下图:
那怎么解决这个呢,一般情况下我都是用取色工具把颜色取出来,然后转化成Color,Blend自带的取色工具就很好用
做法是从ARGB转化成Color这样一个思路,封装成一个类ColorExtension
public sealed class ColorExtension
{
private readonly uint value;
private ColorExtension() { }
private ColorExtension(uint color)
{
this.value = color;
}
public static implicit operator Color(ColorExtension color)
{
uint colorValue = color;
return Color.FromArgb((byte)(colorValue >> 24),
(byte)(colorValue >> 16), (byte)(colorValue >> 8),
(byte)(colorValue));
}
public static implicit operator Brush(ColorExtension color)
{ return new SolidColorBrush(color); }
public static implicit operator uint(ColorExtension color)
{
return color.value;
}
public static implicit operator ColorExtension(uint color)
{
return new ColorExtension(color);
}
}
然后将自己需要的颜色字段放进去即可,比如
public static readonly ColorExtension LightBlue = 0XFFD5E9F1;
现在你就可以通过智能提示点出这些Color了,实际上就是调用一个实例:
SolidColorBrush brsuh= new SolidColorBrush(ColorExtension.LightBlue)
这样写C#代码就很方便了.
2.DateGrid多语言列标题
多语言的实现可以参考很久前一篇文章 本地化实现 DateGrid的Header是一个object对象,无法绑定,后来看到某篇博文提供的一个方法,则是利用HeadStyle的DateTemplate实现多语言,感觉非常有帮助,所以此回一并总结出来:
XAML 代码:
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.HeaderStyle>
<Style TargetType="sdk:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</sdk:DataGridTemplateColumn.HeaderStyle>
</sdk:DataGridTemplateColumn>