当前位置:编程学习 > C#/ASP.NET >>

怎么一行后台代码也没有

这是从银光中国上下载的一个Demo,使用Silverlight做的,实现“缩放”和“拖拽效果”,大家可能看过。但是在项目中几乎没有一句后台代码,只有两个“xaml”文件,一个“App.xaml”,一个“MainPage.xaml”两个文件。其中MainPage.xaml中的代码如下:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" mc:Ignorable="d"
x:Class="FakeWindowDemo.MainPage"
Width="640" Height="480">

<Grid x:Name="LayoutRoot" Background="White">
<i:Interaction.Triggers>
<i:EventTrigger>
<ei:GoToStateAction StateName="DefaultState"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ShrinkGrowWindows">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.3"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="DefaultState">
<Storyboard>
<DoubleAnimation Duration="0" To="0.026" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0.026" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="GrowExpandedWindow">
<Storyboard>
<DoubleAnimation Duration="0" To="0.075" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0.075" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="63" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="40" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="GrowCollapsedWindow">
<Storyboard>
<DoubleAnimation Duration="0" To="0.042" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0.042" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="14" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="-31" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ExpandedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="70" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="20" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="CollapsedGrid" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="OutterCollaspeGrid" Margin="98,90,235,195">
<i:Interaction.Behaviors>
<ei:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
<Grid x:Name="CollapsedGrid" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
<Rectangle Stroke="Black">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Grid x:Name="ExpandGridBtn" HorizontalAlignment="Right" Height="37" Margin="0,15,7,0" VerticalAlignment="Top" Width="39" Background="#00FF0000" Cursor="Hand">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:GoToStateAction StateName="GrowExpandedWindow"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Rectangle Stroke="Black" Margin="0,0,10,11" Fill="#FFEBEBEB"/>
<Rectangle Stroke="Black" Margin="10,11,0,0" Fill="#FFEBEBEB"/>
</Grid>
</Grid>
</Grid>
<Grid x:Name="ExpandedGrid" Margin="24,46,14,52" RenderTransformOrigin="0.5,0.5">
  <Grid.ColumnDefinitions>
  <ColumnDefinition Width="55*" />
  <ColumnDefinition Width="547*" />
  </Grid.ColumnDefinitions>
  <i:Interaction.Behaviors>
<ei:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
<Rectangle Stroke="Black" Grid.ColumnSpan="2">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Grid x:Name="CollapseGridBtn" HorizontalAlignment="Right" Height="37" Margin="0,15,7,0" VerticalAlignment="Top" Width="39" Background="#00FF0000" Cursor="Hand" Grid.Column="1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:GoToStateAction StateName="GrowCollapsedWindow"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Rectangle Stroke="Black" Margin="0,0,10,11" Fill="#FFEBEBEB"/>
</Grid>
</Grid>
</Grid>
</UserControl>

实现原理是怎样的,怎么一行后台代码也没有??? --------------------编程问答-------------------- 一行后台代码也没有也能怎么怎么样的,有什么稀奇啊:-)
asp.net不也可以通过SqlDataSource控件,一行后台代码也不用写也能照样访问数据库,显示数据库表的数据吗?

实现原理是怎样的这问题有点不知道怎么回答了。

其实啊,你就看着书,照着例子,用Expression Blend做几个简单的动画,那么你一直问的那个什么i, ei啊,你贴出来的XAML里的VisualStateGroup,GoToStateAction, Interaction.Triggers……等等吧,就不会显得那么神秘了。

你就做一些简单动画,看看Blend帮你生成什么样的XAML,自己看看就知道了。 --------------------编程问答-------------------- 你可以争取下别人的看法。 --------------------编程问答--------------------
引用楼主 bubumaijinf 的回复:
这是从银光中国上下载的一个Demo,使用Silverlight做的,实现“缩放”和“拖拽效果”,大家可能看过。但是在项目中几乎没有一句后台代码,只有两个“xaml”文件,一个“App.xaml”,一个“MainPage.xaml”两个文件。其中MainPage.xaml中的代码如下:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/……


--------------------编程问答-------------------- 本来就应该让设计人员(比如经过培训的美工人员)来设计应用系统,而程序员只是做一些基础性的组件开发工作。Blend才是设计人员的工具,而vs主要是面向程序员的。

xaml本身没有什么稀奇,你可以看作另外一种html/hxml。关键是背后的各种控件,例如Sotryboard就是定时执行一些事情的集大成者,例如自动将物体相对于它的背景世界而移动、旋转、缩放(如你看到的这个简单xaml所描述的),定时触发一些事件,等等。

不过这些其实都不需要死记硬背,因为设计师使用blend进行“鼠标拖动”式的高效率设计,而不是手敲这些代码。 --------------------编程问答-------------------- Silverlight和WPF这两种应用使用XAML进行界面设置(和html类似),用C#代码编写后台逻辑功能,当然你也可以使用C#代码去控制界面控件。使用Blend开发的Silverlight和WPF,自动生成的代码都是在XAML里面的。

置于楼主的问题,在代码搜一下下面这句话:
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)

这是某个控件的一个属性。Storyboard属性就是该控件的动画属性,后面的(UIElement.RenderTransform).******就是设置的系统内置的动画,实现缩放等效果的。具体的楼主可以自己去查一查,这里就不一一介绍了~ --------------------编程问答-------------------- 让设计人员来开发应用系统,需要进行一些艰苦的培训,因为他们可能缺乏逻辑思维能力。但是程序员几乎是做不出好的前端软件的,这也是很明显的。

如果让设计人员来设计前端系统,生产力可以提高至少4、5倍以上,程序的界面的精美程度、流畅程序、操作方法的创意可以每隔3个月就全新地提高一个级别。主要界面的设计师可以每隔几天就把用户提出的最新的点子给直接实现出来。因为复杂的程序逻辑它几乎不需要测试,它不是代码来实现的,而是用鼠标拖一拖就快速实现的。

我想国内的一般小软件公司难以理解很高生产力的前端设计思路,因为都是把界面分解给程序员去开发,而不是去培训界面设计人员去开发界面系统。国内公司普遍是程序员思维(除了少数成功的游戏公司),我想这是很大的差距。 --------------------编程问答-------------------- 假设设计师遇到一些看起来需要编程才能解决的困难,比如说他想让凡是“胶带”粘着的其它控件都会自动联动起来运动,他会提出一个组件设计工单,例如要求开发人员设计一种行为控件,当设计人员把这个控件依次放到物体表面,界面就显示一个被胶带粘在一起的界面,并且拖动一头则所有物体也就跟着拖动了。于是开发人员按照工单开发了这个组件,设计师就可以用它来设计像册、点餐菜单、图书目录,甚至游戏里边的其它东西。

总之程序员不是做界面的,而是做一些底层组件的开发。程序员应该接触不到最高层次的面向用户的系统开发才对。 --------------------编程问答-------------------- 缩放可以用XAML定义
拖拽必须通过代码实现
不过WPF中有一种东西叫做“行为”,是封装好的代码,可以直接应用到元素上
Blend就自带了“拖放”这个行为
资源菜单里找到拖放行为,应用到某个元素上就可以了
当然用了这个东西就必须要带上Blend的程序集了 --------------------编程问答-------------------- 贴前台干什么?
但没没代码了
--------------------编程问答-------------------- 没后台代码不是很正常的吗? --------------------编程问答-------------------- 学习里 --------------------编程问答-------------------- 请问您装了sliverlight环境吗?您下载的DOme是什么环境几下才能运行, 现在sliverlight环境已经出了5 如果您下载的DOme是5的版本 VS上面是4的版本是不能用的,
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,