Silverlight快速开发框架RapidSL新特性

开发 后端
已经实现了轻量级的权限管理,上传模块,内容管理,作为实例,涉及到了sl开发的各种技术难点和技巧,既可以作为学习,也可以作为项目开发的原型

对sl传统的开发方式进行了集成和封装,核心模块基于MVVM,通用的CRUD ViewModel,只需要定制自己的Xaml View,提供了非常便捷的快速开发方式; 采用了Silverlight 5.0 + EF4.1 Code First + Ria Service SP2 + Ria Service Toolkit + Silverlight Control Toolkit + Light MVVM;已经实现了轻量级的权限管理,上传模块,内容管理,作为实例,涉及到了sl开发的各种技术难点和技巧,既可以作为学习,也可以作为项目开发的原型

点击预览 | 源代码 

支持动态加载.xap,面向插件开发

RapidSL.SL.App.Portal提供主框架的UI逻辑,只需要开发自己的App,如RapidSL.SL.App.Main

 

然后配置菜单:

<sdk:TreeViewItem Header="产品管理" IsExpanded="True">  
                                <controls:AdminMenuItem Id="1" Margin="2" Content="ProductEdit" NavigateView="RapidSL.SL.App.Main.xap/Product.Index" ViewPermission="ProductView"/>  
                                <controls:AdminMenuItem Id="2" Margin="2" Content="CategoryEdit" NavigateView="RapidSL.SL.App.Main.xap/Category.Index" ViewPermission="CategoryView"/>  
                           </sdk:TreeViewItem> 
  • 1.
  • 2.
  • 3.
  • 4.

XapHost控件提供动态下载.xap及加载

public XapHost(string xapUri, string viewName = null)  
         {  
             InitializeComponent();  
             this.FileName = xapUri;  
             var xapLoad = new XapLoader(xapUri);  
             xapLoad.DownloadProgressChanged += (s, e) =>  
             {  
                 this.TotalSize = (e.TotalBytesToReceive * 1d / 1024 / 1024).ToString("0.00");  
                 this.Percentage = e.ProgressPercentage;  
             };  
             xapLoad.LoadCompleted += (s, e) =>  
             {  
                 this.Content = e.Element;  
             };  
             xapLoad.LoadControl(null, viewName);  
         } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

对Resource的支持

找到所有标识有 StaticResourceAttribute的类,然后创建相关实例,并注入到Application.Resources,相当于在 App.xaml里手写资源

实现了资源管理器对资源进行注入管理

View Code   
 public class ViewModelManager  
     {  
         private static Application app = Application.Current;   
         public static void InjectViewModelsToResources()  
         {  
             foreach (AssemblyPart ap in Deployment.Current.Parts)  
             {  
                 var sri = Application.GetResourceStream(new Uri(ap.Source, UriKind.Relative));  
                 var assembly = new AssemblyPart().Load(sri.Stream);  
   
                 InjectViewModelsToResources(assembly);               
             }   
         }   
         public static void InjectViewModelsToResources(Assembly assembly)  
         {  
             foreach (Type type in assembly.GetTypes())  
             {  
                 var attributes = type.GetCustomAttributes(false);  
   
                 foreach (var attribute in attributes)  
                 {  
                     if (attribute is StaticResourceAttribute)  
                     {  
                         var resourceKey = ((StaticResourceAttribute)attribute).Key;  
                         if (string.IsNullOrEmpty(resourceKey))  
                             resourceKey = type.Name;   
                         var obj = Activator.CreateInstance(type);  
                         if (!app.Resources.Contains(resourceKey))  
                             app.Resources.Add(resourceKey, obj);  
                     }  
                 }  
             }  
         }  
         public static T GetViewModelFromResources<T>()  
         {  
             var key = typeof(T).Name;  
             if (app.Resources.Contains(key))  
                 return (T)app.Resources[key];  
             else 
                 return default(T);  
         }  
     } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

键盘Enter键提交表单

使用AttatchProperty实现传统Html表单的键盘Enter提交

<Grid x:Name="LayoutRoot" core:AttachProperties.SubmitButton="{Binding ElementName=submit}">  
<Button x:Name="submit" Content="登录" Margin="20,0,20,0" Padding="20,0,20,0" Command="{Binding UserLogin}"/>  
</Grid> 
  • 1.
  • 2.
  • 3.

具体绑定按钮和键盘事件

#region SubmitButton AttachProperty  
         public static object GetSubmitButton(DependencyObject obj)  
         {  
             return (object)obj.GetValue(SubmitButtonProperty);  
         }  
   
         public static void SetSubmitButton(DependencyObject obj, object value)  
         {  
             obj.SetValue(SubmitButtonProperty, value);  
         }  
   
         // Using a DependencyProperty as the backing store for SubmitButton.  This enables animation, styling, binding, etc...  
         public static readonly DependencyProperty SubmitButtonProperty =  
             DependencyProperty.RegisterAttached("SubmitButton", typeof(object), typeof(AttachProperties), new PropertyMetadata(SubmitButtonChanged));  
   
         private static void SubmitButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)  
         {  
             var button = (ButtonBase)e.NewValue;  
             var form = d as UIElement;  
             form.KeyDown += (s, se) =>  
             {  
                 if (se.Key == Key.Enter)  
                 {  
                     button.Focus();  
                     if (button.Command != null)  
                        button.Dispatcher.BeginInvoke(()=>  button.Command.Execute(null));  
                 }  
             };  
         }  
         #endregion 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

原文链接:http://www.cnblogs.com/guozili/archive/2012/08/28/2659035.html

【编辑推荐】

  1. Silverlight 3D开源项目
  2. Silverlight 5 项目使用async/await
  3. 基于silverlight一个“树形结构图”控件
  4. 游戏人生Silverlight:贪吃蛇
  5. 游戏人生Silverlight:星际竞技场
责任编辑:张伟 来源: guozili的博客
相关推荐

2009-07-27 09:46:28

Silverlight

2010-12-06 09:33:21

Silverlight

2010-08-06 09:18:14

Flex

2011-11-08 10:36:42

Java

2010-07-29 09:03:18

Silverlight

2009-11-26 11:29:46

Silverlight

2014-10-20 13:57:59

JavaFX 8Java 8

2019-09-02 14:51:33

2012-05-15 15:44:00

Silverlight

2009-12-31 17:21:41

Silverlight

2011-05-20 10:15:06

JDK7

2011-04-22 10:45:14

SimpleFrame

2013-07-22 11:18:02

Android开发框架Afinal

2010-06-09 10:48:55

F#Silverlight

2023-10-06 16:58:57

2011-06-14 17:02:43

Xcode 4Cocoa TouchiOS

2022-12-25 10:53:47

2009-03-26 08:57:22

微软IE8浏览器

2025-02-10 00:23:11

Spring微服务架构

2012-02-02 16:32:23

Silverlight控件模型分类
点赞
收藏

51CTO技术栈公众号