没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083646.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/14969947/bg1.jpg)
SilverLight企业应用框架设计企业应用框架设计
目录:目录:
一.整体说明
二.框架画面
三.服务端设计
四.实体层设计+为客户端动态生成服务代理(自己实现RiaService)
五.客户端调用服务端(使用JSON传递数据,自己实现RESTful Web服务)
六.自定义系统菜单(使用自己的DataForm)
一.整体说明
下面我说一下这个框架的一些特点
一:自己实现基于HTTP的REST服务
用siliverlight开发企业应用
大多人数都喜欢用微软提供的EntityFramework + RIA Service
由于某些特殊的原因需要
项目可能不能用EF和RIAService那么这个系列将为您提供一些指导和最佳实践原则
二:自己实现客户端实体和服务代理的代码生成逻辑
使用RiaService的人肯定会知道,VS开发环境在Silverlight客户端,自动生成了服务代理的代码和实体的代码
这些代码放在Generated_Code\[YorRIAService].g.cs这个隐藏文件里
如果我们抛弃RIAService,那么势必将自己完成这些代码生成工作在我们这个系列中将介绍到每次编译程序都会自动生成这些
代码的技巧
三:自己实现的DataForm控件
Silverlight提供的DataForm控件用以编辑实体
非常强大
但是太过强大了,把一些操作搞他复杂了
咱们这个系列将使用自己的DataForm控件
完成实体编辑业务逻辑
-------------------------------------
还有其他的一些诸如
自定义tabcontrol模版的技巧
都会在这个系列中讲到
二.框架画面
框架画面分为上中下三层
由下面一个Grid控件完成布局
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="60"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="22"></RowDefinition>
</Grid.RowDefinitions>
</Grid>
![](https://csdnimg.cn/release/download_crawler_static/14969947/bg2.jpg)
上层为顶部菜单区域
中层为子菜单和业务画面部分
下层为状态栏和版权信息区域
下面我们分别看一下这三个部分的生成逻辑
一:顶部菜单区域
XAML代码如下:
<StackPanel x:Name="TopMenuS" Orientation="Horizontal" Background="{StaticResource HeadBG}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"></ColumnDefinition>
<ColumnDefinition Width="142"></ColumnDefinition>
<ColumnDefinition Width="10"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="3"></RowDefinition>
<RowDefinition Height="18"></RowDefinition>
<RowDefinition Height="18"></RowDefinition>
<RowDefinition Height="18"></RowDefinition>
<RowDefinition Height="3"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock x:Name="helloBlock" Grid.Column="1" Grid.Row="1" Text="xxxx通信" />
<TextBlock x:Name="UserName" Text="Administrator" Grid.Column="1" Grid.Row="2" />
<TextBlock Text="欢迎使用 xxx监控系统" Grid.Column="1" Grid.Row="3" />
</Grid>
<Rectangle Width="1" Fill="{StaticResource HeadSplitor}"></Rectangle>
<StackPanel>
<Button Style="{StaticResource ToolBtnStyle}" Content="全部关闭" Click="CloseAllClick"></Button>
<Button Style="{StaticResource ToolBtnStyle}" Content="关闭当前" Click="CloseCurClick"></Button>
<Button Style="{StaticResource ToolBtnStyle}" Content="关闭其他" Click="CloseOtherClick"></Button>
</StackPanel>
<Rectangle Width="1" Fill="{StaticResource HeadSplitor}"></Rectangle>
<StackPanel>
<Button Style="{StaticResource ToolBtnStyle}" Content="修改密码" Click="ChangePSWBtnClick"></Button>
<Button Style="{StaticResource ToolBtnStyle}" Content="退出系统" Click="LoginOutBtnClick"></Button>
<Button Style="{StaticResource ToolBtnStyle}" Content="重新登录" Click="ReLoginBtnClick"></Button>
</StackPanel>
<Rectangle Width="1" Fill="{StaticResource HeadSplitor}"></Rectangle>
</StackPanel>
顶部菜单分为三部分
从左向右依次是
欢迎信息(GRID)
顶部菜单(动态创建)
![](https://csdnimg.cn/release/download_crawler_static/14969947/bg3.jpg)
常用按钮(StackPanel)
顶部菜单的容器是一个StackPanel
此容器有一个渐变的背景色,样式代码如下
<!--头部渐变背景-->
<LinearGradientBrush x:Key="HeadBG" StartPoint="0.5 0" EndPoint="0.5 1">
<GradientStop Offset="0" Color="#FAFAFA"></GradientStop>
<GradientStop Offset="0.5" Color="#D6D6D6"></GradientStop>
</LinearGradientBrush>
此容器每个部分都有一个Rectangle来分割
此Rectangle也有个渐变的背景,代码如下
<!--头部分隔条渐变背景-->
<LinearGradientBrush x:Key="HeadSplitor" StartPoint="0.5 0" EndPoint="0.5 1">
<GradientStop Offset="0" Color="#FAFAFA"></GradientStop>
<GradientStop Offset="1" Color="#000000"></GradientStop>
</LinearGradientBrush>
常用按钮的样式如下:
<!--头部的 三分栏 工具按钮样式-->
<Style x:Key="ToolBtnStyle" TargetType="Button">
<Style.Setters>
<Setter Property="Width" Value="90"></Setter>
<Setter Property="Height" Value="20"></Setter>
<Setter Property="Cursor" Value="Hand"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid x:Name="Container">
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="fillColor"
Storyboard.TargetProperty="Opacity" Duration="0" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Normal" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Rectangle x:Name="fillColor" Opacity="0" Fill="#B5B5B5" IsHitTestVisible="False" RadiusX="1"
RadiusY="1"/>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
动态创建顶部菜单的代码如下
(大家先不要深究数据是怎么来的,在以后的章节咱们会讲到数据交互的细节)
var tops = Common.ViewUtility.AllMenu
.Where(m => m.ParentId == Guid.Empty)
.OrderByDescending(m => m.MenuOrder);
foreach (var m in tops)
{
var topM = new HeadBtn();
topM.DataContext = m;
topM.MouseLeftButtonUp += new MouseButtonEventHandler(topM_MouseLeftButtonUp);
TopMenuS.Children.Insert(2,topM);
}
这里创建的HeadBtn是一个自定义的控件
![](https://csdnimg.cn/release/download_crawler_static/14969947/bg4.jpg)
(每个顶部菜单就是一个控件的实例)
该自定义控件XAML代码如下:
<StackPanel Orientation="Horizontal" Cursor="Hand">
<Grid x:Name="btn" Width="90" Height="60">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
</Grid.RowDefinitions>
<Image Source="../Images/module2.png" Height="30"></Image>
<TextBlock Text="{Binding MenuName}" Grid.Row="1" FontSize="12"
VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock>
</Grid>
<Rectangle Width="1" Fill="{StaticResource HeadSplitor}"></Rectangle>
</StackPanel>
注意,这里每个顶部菜单的ICO图标不是动态的,朋友们,想让他变成动态的就自己动手吧
为了实现美观的效果
我为这个自定义控件定义了鼠标的滑入滑出事件
private void UserControl_MouseEnter(object sender, MouseEventArgs e)
{
var color = Color.FromArgb(255,180, 180, 180);
btn.Background = new SolidColorBrush(color);
}
private void UserControl_MouseLeave(object sender, MouseEventArgs e)
{
btn.Background = new SolidColorBrush(Colors.Transparent);
}
这些颜色的值,本应该作为资源放在样式文件中,我这里也没有做处理
二:底部状态条区域
此处比较简单
代码如下:
<StackPanel Width="Auto" Grid.Row="2"
Background="#B5B5B5" Orientation="Horizontal" FlowDirection="RightToLeft">
<TextBlock VerticalAlignment="Center" Text="V1.0.0 Copy Right ? All Rights Reserved"/>
<TextBlock VerticalAlignment="Center" Text="xxxx"/>
</StackPanel>
1.我没有做状态信息的内容
2.版本信息应该通过Assambly获取
三:中部区域
XAML代码如下
剩余24页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38730331
- 粉丝: 5
- 资源: 958
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- ffmpeg-4.2.2-win64-shared.zip
- 解决QT5.12.6编译X64和X86程序无法使用SSL协议问题.zip
- ISP51-Win-V2.9.exe 中颖芯片的ISP下载工具
- Biblioteca de Processamento e Visualização de Dados IoT em Tempo
- A personal budget tracker in Python is a software or application
- CWebPage类,用于VC和JS混合编程
- 电脑必装神器:验证码识别v2.0-便携版.rar
- home assistant安装相关资料
- springboot305基于Java的银行账目账户管理系统的设计与实现
- S3C2410X英文技术手册
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)