最近看到很多人都在寫Silverlight的文章.讓小弟再忙也要來學學silverlight的技術.
這篇就拿一般常見的DataGrid控制項來說明如何整合其它控制項,像DatePicker,ComboBox
就直接由程式碼來講解..
Page.xaml
<UserControl xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightApplication1.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:src="clr-namespace:SilverlightApplication1" Width="400" Height="300"> <UserControl.Resources > <src:AddressProvider x:Key="addressProvider"/> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid x:Name="dg" AutoGenerateColumns="False"> <data:DataGrid.Columns> <data:DataGridTextColumn Header="姓名" Binding="{Binding Name}" /> <data:DataGridTemplateColumn Header="生日"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <basics:DatePicker x:Name="dp" SelectedDate="{Binding Birthday}"></basics:DatePicker> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> <data:DataGridTemplateColumn Header="地址"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox SelectedItem="{Binding Address}" ItemsSource="{Binding AddressList, Source={StaticResource addressProvider}}" > </ComboBox> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> <data:DataGridCheckBoxColumn Header="Blog" Binding="{Binding Blog}" /> </data:DataGrid.Columns> </data:DataGrid> </Grid> </UserControl>
Page.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightApplication1 { public partial class Page : UserControl { public Page() { InitializeComponent(); List<Data> source = new List<Data>(); source.Add(new Data() { Name = "puma", Birthday = new DateTime(1981, 9, 24), Address = "台南", Blog = false }); source.Add(new Data() { Name = "F6 Team", Birthday = new DateTime(2008, 10, 10), Address = "台北", Blog = true }); dg.ItemsSource = source; } } public class Data { public string Name { get; set; } public DateTime Birthday { get; set; } public string Address { get; set; } public bool Blog { get; set; } } public class AddressProvider { public List<string> AddressList { get { return new List<string> { "台北", "台中", "台南", "高雄" }; } } } }
在Page.xaml要注意的是
xmlns:src="clr-namespace:SilverlightApplication1"
與
<UserControl.Resources > <src:AddressProvider x:Key="addressProvider"/> </UserControl.Resources>
主要是讓ComboBox的StaticResource使用
執行結果:
DatePicker
ComboBox
參考網址:
http://weblogs.asp.net/manishdalal/archive/2008/09/28/combobox-in-datagrid.aspx
# re: [Silverlight]DataGrid整合DatePicker與ComboBox的應用, Posted by kinglee on 2009/7/21 上午 09:06 回覆
好文章!我正好在研究这方面的内容,受益匪浅啊!谢谢!
# re: [Silverlight]DataGrid整合DatePicker與ComboBox的應用, Posted by William on 2010/1/22 上午 11:02 回覆
以該範例請教, 若ComboxBox下拉內容顯示仍是以台北,台中,台南, 但該地址欄位真正要儲存的是代表台北,台中,台南的一組CODE,請問有解嗎,煩惱中