今天同事跟我討論用Silverlight做後台,這種資料為主的網站用Silverlight開發,一定做的到,但我個人覺得比較累。
今天同事跟我討論用Silverlight做後台,這種資料為主的網站用Silverlight開發,一定做的到,但我個人覺得比較累。
累1-表單
Silverlight用Grid畫表格很累,表單驗證的模組還沒有比jQuery好用。
累2-CSS
雖然Silverlight有Style,但可用性離CSS還差的很遠呢。
CSS可以有同時有一個以上樣式,如:<div class="AStyle BStyle"/> ,Silverlight沒有,也就是小差異也要全新寫一個Style。
CSS可以設定的樣式比較多,Silverlight較少,如果要豐富樣式必需重寫Template(取代原本的樣式),雖然Template可以做的比CSS多,但隨便一個Template都要寫的非常多,沒有CSS好閱讀,如附錄一
CSS可以階層設定如 .head div.nav a { },Silverlight沒有。
Silverlight可以做的多,但寫的一定比CSS多很多。
累3-資料列表
在Silverlight中可以資料列表的有
- DataGrid-有寫過Windows Form的人就知道,要改DataGrid的樣式與自訂每一個Column的內容有多麻煩。
- ItemsControl-要自己畫欄位與詳細設定寬,不然每一個Cell的寬會不同。
- ListBox-同上。
當然也有優勢啦
比AJAX好方便
同樣是非同步呼叫,寫AJAX要自己寫Web Services,使用WCF的Domain Service+Entity Framework自動產生Web Services與資料存取,用Silverlight會比較方便些。
比JavaScript好寫好Debug
用C#寫前端,會比用JavaScript好寫些啦。
不用管Browser的CSS差異。
Silverlight的程式不管在任何瀏覽器都是一樣的結果,這點就比CSS強。
個人還是覺得,那一個方便用那一個技術,單純的資料操作網站,用Silverlight應該會比ASP.NET累,但是如果要做如手機展示網站,手機可以720度旋轉(擬3D),擬真實手機操作,用JavaScript寫一般人寫到死都寫不出來吧。
附錄一
<ControlTemplate x:Key="NewButton" TargetType="Button">
<Grid Height="12" Width="12">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Unfocused" />
<VisualState x:Name="Focused" />
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="border" Storyboard.TargetProperty="(Border.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<SplineColorKeyFrame KeyTime="00:00:00" Value="#5EFFFFFF" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Normal" />
<VisualState x:Name="Pressed" />
<VisualState x:Name="Disabled" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border>
<Border.Background>
<ImageBrush ImageSource="/MyProject;component/Photo/Button/Background.png" Stretch="Fill" />
</Border.Background>
</Border>
<Border x:Name="border">
<Border.Background>
<LinearGradientBrush EndPoint="0.198,0.198" StartPoint="0.85,0.857">
<GradientStop Color="#00000000" />
<GradientStop Color="#00FFFFFF" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
</Grid>
</ControlTemplate>