去年下半年去了一趟台湾后,似乎就再也没有写过博客,尽管在公司内部论坛上坚持发表一些文章,已经大多数与技术本身无关了. 刚进公司做Silverlight时,曾写了一篇 Silverlight中本地化的实现,一晃快三年过去我仍然做着Silverlight的工作,也见证这几年Silverlight在开发者或是社区的影响力由鼎盛到日渐式微,从大学学习Silverlight到目前,已经过了5年,比起国内大部分Silverlighter爱好者,开发者,我似乎更愿意去表达一种情怀,尽管我的工作本身还需要懂的一些WinForm,ASP.NET,WPF,WCF这些技术,我想我的程序员职业生涯是不会离开.NET这个圈了,但是以后的事情谁知道?也许过几年我开个小店,卖点奶茶,似乎也是不错.
今天还想提笔写写对本地化中的改进,因为只是在之前一篇文章上的一点改进的,所以不见得有什么深度,但是出于分享的目的,还是希望对刚刚接触XAML的人有一些帮助. 在上一篇的基础上,我们可以看到View上最后读取字符串是用了很长的XAML去编写: <TextBlock Height="23" Name="textBlock1" Text="{Binding ConverterParameter=Country,Converter={StaticResource Localization},Source={StaticResource Localization}}" Width="90" /> 但是程序中这种语句很多的话,要不停的粘贴复制,可能就觉得十分的不方便,所以我的做法改进后就变成下面这样: <TextBlock Height="23" Name="textBlock2" local:AppResource.ResourceKey="Country" Width="90" /> 你应该看出来了,对,这里是用的附加属性,我的博客里最近的几篇文章都有提及到它,所以重视一下附加属性还是很有必要的,因为掌握好了,确实能让你的XAML看起来更为优雅,简洁, 实际上我对代码只是修改了很小的一部分,我贴出来大家自己看看就好: private static void OnResourceKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var resourceKey = e.NewValue as string; if (resourceKey != null) { string resourceData = Get(resourceKey); if (resourceData != null) { if (d is TextBlock) (d as TextBlock).Text = resourceData; if (d is TextBox) (d as TextBox).Text = resourceData; //其它控件 } } } public static string GetResourceKey(DependencyObject d) { return (string)d.GetValue(ResourceKeyProperty); } public static void SetResourceKey(DependencyObject d, string value) { d.SetValue(ResourceKeyProperty, value); } public static readonly DependencyProperty ResourceKeyProperty = DependencyProperty.RegisterAttached("ResourceKey", typeof(string), typeof(AppResource), new PropertyMetadata(null, OnResourceKeyChanged)); 代码中加了一个ResourceKey的属性,虽然很短,但是应该还是很有用,其实这种情况也能用Silverlight5里面的MarkupExtension去做,所以还是看个人想法不同进行取舍. 因为改动的代码量较少,就不上传文件了,希望这个小小的Tip给你带来一点帮助,其实只要是做XAML,这些技术不是都是通用么^ v ^ |
|
来自: 昵称10504424 > 《SilverLight》