这是来公司做的第一个项目实例,也是头一次接触Silverlight。开始吧!
1.打开VS,创建新解决方案,选择Silverlight应用程序
因为Silverlight不能独立的运行,所以需要一个Web网站来承载。
2.MainPage.xaml是其首次运行时的页面,当然这个页面可以修改,那需要在App.xaml中进行相应的修改,在最后我会进行说明。先继续我们的实例
<UserControl x:Class="SilverlightApplication8.MainPage" 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:telerik="http://schemas.telerik.com/2008/xaml/presentation" mc:Ignorable="d" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" Foreground="#FF1453E2" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"> <UserControl.Resources> <DataTemplate x:Key="celltemplate" > <StackPanel > <CheckBox IsChecked="{Binding Validated,Mode=TwoWay}" IsEnabled="{Binding ValidatedEnable,Mode=TwoWay}"></CheckBox> </StackPanel> </DataTemplate> <DataTemplate x:Key="messageTemplate"> <StackPanel> <StackPanel Orientation="Horizontal" Height="23"> <TextBlock Text="Title:" Width="40" VerticalAlignment="Center" /> <TextBox Text="{Binding Path=Title}" Width="180"/> <TextBlock Text="By:" Width="30" VerticalAlignment="Center" /> <TextBox Text="{Binding Path=OpenedBy}" Width="80"/> <TextBlock Text="At:" Width="30" VerticalAlignment="Center" /> <TextBox Text="{Binding Path=OpenTime}" Width="80"/> <Button Content="Switch" Width="75" Margin="20,0 0" Click="Button_Click"/> </StackPanel> <StackPanel x:Name="detailPanel" Orientation="Horizontal" Height="60" Visibility="Collapsed"> <TextBox Margin="40,5,10,5" Text="{Binding Path=Content}" Width="400"/> </StackPanel> </StackPanel> </DataTemplate> </UserControl.Resources> <!--之前listBox的填充内容--> <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> <StackPanel x:Name="LayoutRoot" Background="LightBlue" VerticalAlignment="Center" HorizontalAlignment="Center" Width="800" Height="600" > <StackPanel Orientation="Horizontal"> <TextBlock Text="Yin Ni Si BBS" FontSize="24" Margin="5" VerticalAlignment="Bottom"/> <TextBlock Text="Powered by: LYY" Width="200" VerticalAlignment="Bottom" Margin="10"/> <telerik:RadButton Content="Load" Height="23" Width="75" VerticalAlignment="Bottom" Margin="-80,10" Click="LoadButton_Click" Name="load" /> </StackPanel> <!--<ListBox x:Name="listBox" Margin="10" Height="300" ItemTemplate="{StaticResource messageTemplate}"/>--> <!--<sdk:DataGrid AutoGenerateColumns="False" Height="162" Name="dataGrid1" Width="484" IsReadOnly="True" BorderThickness="10" DataContext="{Binding}" SelectionChanged="dataGrid1_SelectionChanged" > <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Header="Title" Width="100" Binding="{Binding Title,Mode=TwoWay}" /> <sdk:DataGridTextColumn Header="Author" Width="80" Binding="{Binding OpenedBy,Mode=TwoWay}" /> <sdk:DataGridTextColumn Header="Time" Width="80" Binding="{Binding OpenTime,Mode=TwoWay}" /> <sdk:DataGridTextColumn x:Name="nr" Header="Content" Width="80" Binding="{Binding Content,Mode=TwoWay}" /> <sdk:DataGridTextColumn Header="Validated" Width="80" Binding="{Binding Validated,Mode=TwoWay}" /> </sdk:DataGrid.Columns> </sdk:DataGrid>--> <sdk:Label Height="28" Name="label1" Width="120" Margin="0,0" HorizontalAlignment="Left" Content="Detail:" FontSize="20" /> <StackPanel x:Name="detailPane2" Orientation="Horizontal" Visibility="Collapsed" Height="200" HorizontalAlignment="Center"> <StackPanel VerticalAlignment="Center" Height="160"> <StackPanel Orientation="Horizontal" Width="200"> <TextBlock FontSize="15" VerticalAlignment="Center">Title:</TextBlock> <TextBox Width="100" Margin="27,0" Name="TextBox3" Height="32"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Width="200"> <TextBlock FontSize="15" VerticalAlignment="Center">Autor:</TextBlock> <TextBox Width="100" Margin="19,0" Name="TextBox4" Height="32"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Width="200"> <TextBlock FontSize="15" VerticalAlignment="Center">Time:</TextBlock> <telerik:RadDatePicker Margin="23,0" Width="100" DateTimeText="" Name="time1" Height="32"></telerik:RadDatePicker> </StackPanel> <StackPanel Orientation="Horizontal" Width="200"> <TextBlock FontSize="15" VerticalAlignment="Center">Content:</TextBlock> <TextBox Width="100" Name="TextBox2" Height="32"></TextBox> </StackPanel> <StackPanel Orientation="Horizontal" Width="200"> <TextBlock FontSize="15" VerticalAlignment="Center">Age:</TextBlock> <telerik:RadComboBox displayMemberPath="Age" Width="100" Margin="31,0" x:Name="cboage" Height="32"> </telerik:RadComboBox> </StackPanel> </StackPanel> <StackPanel VerticalAlignment="Center"> <telerik:RadButton Content="Modify" Height="40" Width="50" Click="btnModify_Click" VerticalContentAlignment="Center"></telerik:RadButton> <telerik:RadButton Content="Add" Height="40" Width="50" Click="btnAdd_Click" VerticalContentAlignment="Center"></telerik:RadButton> <telerik:RadButton Content="Delete" Height="40" Width="50" Click="btnDelete_Click" VerticalContentAlignment="Center"></telerik:RadButton> <telerik:RadButton x:Name="btnChangeValidated" Height="40" Width="50" Click="btnChangeValidate_Click" Margin="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Center" VerticalAlignment="Stretch"> <telerik:RadButton.Content> <StackPanel Width="50" Height="40" VerticalAlignment="Center" HorizontalAlignment="Center"> <TextBlock x:Name="tbedit" TextAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="0,0">Edit</TextBlock> <TextBlock x:Name="tbvalidate" TextAlignment="Center" VerticalAlignment="Bottom">Validate</TextBlock> </StackPanel> </telerik:RadButton.Content> </telerik:RadButton> </StackPanel> </StackPanel> <telerik:RadGridView ShowGroupPanel="False" IsFilteringallowed="False" IsReadOnly="True" AutoGenerateColumns="False" CanUserFreezeColumns="False" CanUserResizeColumns="False" Name="radgridview1" SelectionChanged="radgridview1_SelectionChanged" Width="732" Height="195" Margin="0,0"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn Width="100" Header="Title" DataMemberBinding="{Binding Title,Mode=TwoWay}"></telerik:GridViewDataColumn> <telerik:GridViewDataColumn Width="100" Header="Author" DataMemberBinding="{Binding OpenedBy,Mode=TwoWay}"></telerik:GridViewDataColumn> <telerik:GridViewDataColumn Width="100" Header="Time" DataFormatString="{} {0:yyyy-MM-dd}" DataMemberBinding="{Binding OpenTime,Mode=TwoWay}"></telerik:GridViewDataColumn> <telerik:GridViewDataColumn Width="100" Header="Content" DataMemberBinding="{Binding Content,Mode=TwoWay}"></telerik:GridViewDataColumn> <telerik:GridViewDataColumn Width="100" Header="Age" DataMemberBinding="{Binding Age,Mode=TwoWay}"></telerik:GridViewDataColumn> <!--<telerik:GridViewDataColumn Width="100" Header="Validated" DataMemberBinding="{Binding Validated}"></telerik:GridViewDataColumn>--> <!--<telerik:GridViewColumn Header="Change validated" Width="120"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <CheckBox x:Name="abc" DataContext="{Binding Validated}"></CheckBox> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn>--> <telerik:GridViewDataColumn Header="Change Validate" DataMemberBinding="{Binding Validated,Mode=TwoWay}" CellTemplate="{StaticResource celltemplate}"> <!--<telerik:GridViewDataColumn.CellTemplate> <DataTemplate > <StackPanel > <CheckBox IsChecked="{Binding Validated,Mode=TwoWay}"></CheckBox> </StackPanel> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate>--> </telerik:GridViewDataColumn> </telerik:RadGridView.Columns> </telerik:RadGridView> </StackPanel> </ScrollViewer> </UserControl>
截图:
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; using System.ComponentModel; using System.Collections.ObjectModel; namespace SilverlightApplication8 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); //getage(); //Telerik.Windows.Controls.RadComboBoxItem comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "0-10"; //this.age.Items.Add( comBox ); //comBox=new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "10-20"; //this.age.Items.Add( comBox ); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "20-30"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "30-40"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "40-50"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "50-60"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "60-70"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "70-80"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "80-90"; //this.age.Items.Add(comBox); //comBox = new Telerik.Windows.Controls.RadComboBoxItem(); //comBox.Content = "90-100"; //this.age.Items.Add(comBox); } private ObservableCollection<People> _listage = null; public static ObservableCollection<People> Getage() { ObservableCollection<People> listage = new ObservableCollection<People>(); for (int i = 1; i <= 100; i++) { People msgage = new People() { Age = i.ToString() }; listage.Add(msgage); } return listage; } //public void getage() //{ // for (int j = 1; j <= 100; j++) // { // Telerik.Windows.Controls.RadComboBoxItem comBoxitem = new Telerik.Windows.Controls.RadComboBoxItem(); // comBoxitem.Content = j; // age.Items.Add(comBoxitem); // } //} private ObservableCollection<People> _listPeople = null; public static ObservableCollection<People> GetPerson() { ObservableCollection<People> listPerson = new ObservableCollection<People>(); for (int i = 0; i < 5; i++) { People msg1 = new People() { Title = "Message Title " + i.ToString(),OpenedBy = (i % 2 == 0) ? "蓝天" : "白云",OpenTime = DateTime.Now,Content = (i % 2 == 0) ? "青山" : "绿水",Validated=true,Age="20" }; listPerson.Add(msg1); } return listPerson; } private void Button_Click(object sender,RoutedEventArgs e) { Button b = sender as Button; StackPanel p = VisualTreeHelper.GetParent(b) as StackPanel; p = VisualTreeHelper.GetParent(p) as StackPanel; p = p.FindName("detailPanel") as StackPanel; if (p.Visibility == Visibility.Collapsed) { p.Visibility = Visibility.Visible; } else { p.Visibility = Visibility.Collapsed; } } private void LoadButton_Click(object sender,RoutedEventArgs e) { /*List<Message> ppList = new List<Message>(); for (int i = 0; i < 30; i++) { Message msg = new Message() { Title = "Message Title " + i.ToString(),OpenTime = DateTime.Now.ToShortDateString(),Content = (i % 2 == 0) ? "青山" : "绿水" }; ppList.Add(msg); } this.listBox.ItemsSource = ppList;*/ //List<People> ok = new List<People>(); //for (int i = 0; i < 5; i++) //{ // People msg1 = new People() // { // Title = "Message Title " + i.ToString(),// OpenedBy = (i % 2 == 0) ? "蓝天" : "白云",// OpenTime = DateTime.Now,// Content = (i % 2 == 0) ? "青山" : "绿水" // }; // ok.Add(msg1); //} //this.dataGrid1.ItemsSource = ok; //this.radgridview1.ItemsSource = ok; _listPeople = GetPerson(); _listage = Getage(); //this.dataGrid1.ItemsSource = _listPeople; this.radgridview1.ItemsSource = _listPeople; this.cboage.ItemsSource = _listage; this.load.Visibility = Visibility.Collapsed; } //private void LayoutRoot_MouseWheel(object sender,MouseWheelEventArgs e) //{ // if (e.Delta > 0) // {向上 } // else // { 向下 } //} //private void dataGrid1_SelectionChanged(object sender,SelectionChangedEventArgs e) //{ // //this.change.Visibility = Visibility.Collapsed; // if (detailPane2.Visibility == Visibility.Collapsed) // { // detailPane2.Visibility = Visibility.Visible; // } // People a = this.dataGrid1.SelectedItem as People; // if (a != null) // { // this.TextBox2.Text = a.Content; // this.TextBox3.Text = a.Title; // this.TextBox4.Text = a.OpenedBy; // this.time1.SelectedValue = Convert.ToDateTime(a.OpenTime); // this.validatedcheckBox.IsChecked = a.Validated; // } // else { // this.TextBox2.Text = ""; // this.TextBox3.Text = ""; // this.TextBox4.Text = ""; // this.time1.SelectedValue = null; // this.validatedcheckBox.IsChecked = false; // } //} private void btnModify_Click(object sender,RoutedEventArgs e) { //People bc = this.dataGrid1.SelectedItem as People; //if (bc != null) //{ // bc.Content = this.TextBox2.Text; // bc.Title = this.TextBox3.Text; // bc.OpenedBy = this.TextBox4.Text; // bc.OpenTime = Convert.ToDateTime(this.time1.SelectedValue); // bc.Validated =Convert.ToBoolean( this.validatedcheckBox.IsChecked); //} People ad = this.radgridview1.SelectedItem as People; if (ad != null) { ad.Content = this.TextBox2.Text; ad.Title = this.TextBox3.Text; ad.OpenedBy = this.TextBox4.Text; ad.OpenTime = Convert.ToDateTime(this.time1.SelectedValue); ad.Age = Convert.ToString(this.cboage.Text); } /* List<People> ok1 = new List<People>(); //for (int i = 0; i < 5; i++) //{ People msg12 = new People() { Title = this.TextBox3.Text,OpenedBy = this.TextBox4.Text,OpenTime = this.TextBox5.Text,Content = this.TextBox2.Text }; ok1.Add(msg12); //} this.dataGrid1.ItemsSource = ok1;*/ /* List<People> ok = new List<People>(); 只显示更新后的一行数据 People msg12 = new People() { Title = this.TextBox3.Text,Content = this.TextBox2.Text }; ok.Add(bc); this.dataGrid1.ItemsSource = ok;*/ } private void btnAdd_Click(object sender,RoutedEventArgs e) { People bc = new People(); bc.Content = this.TextBox2.Text; bc.Title = this.TextBox3.Text; bc.OpenedBy = this.TextBox4.Text; bc.OpenTime =Convert.ToDateTime(this.time1.SelectedValue); bc.Age = Convert.ToString(this.cboage.Text); bc.Validated = true; _listPeople.Add(bc); /*private void Button_Click_1(object sender,RoutedEventArgs e) { List<People> ok = new List<People>(); foreach (object o in dataGrid1.ItemsSource) { dataGrid1.SelectedItems.Add(o); } if (ok.Count > dataGrid1.SelectedItems.Count) { for (int i = 0; i < dataGrid1.SelectedItems.Count; i++) { People people = dataGrid1.SelectedItems[0] as People; ok.Remove(people); } } else { ok.Clear(); } }*/ } private void btnDelete_Click(object sender,RoutedEventArgs e) { //if (this.dataGrid1.SelectedItem is People) //{ // _listPeople.Remove(this.dataGrid1.SelectedItem as People); //} if (this.radgridview1.SelectedItem is People) { _listPeople.Remove(this.radgridview1.SelectedItem as People); } if (this.radgridview1.Items.Count < 1) { _listPeople = GetPerson(); //this.dataGrid1.ItemsSource = _listPeople; this.radgridview1.ItemsSource = _listPeople; } } private void radgridview1_SelectionChanged(object sender,Telerik.Windows.Controls.SelectionChangeEventArgs e) { if (detailPane2.Visibility == Visibility.Collapsed) { detailPane2.Visibility = Visibility.Visible; } People a = this.radgridview1.SelectedItem as People; if (a != null) { this.TextBox2.Text = a.Content; this.TextBox3.Text = a.Title; this.TextBox4.Text = a.OpenedBy; this.time1.SelectedValue = a.OpenTime; this.cboage.Text = Convert.ToString(a.Age); } else { this.TextBox2.Text = ""; this.TextBox3.Text = ""; this.TextBox4.Text = ""; this.time1.SelectedValue = null; this.cboage.Text = ""; } } private void btnChangeValidate_Click(object sender,RoutedEventArgs e) { // //CheckBox checkBox1 = (CheckBox)VisualTreeHelper.GetChild(this.abc.LoadContent(),0); // StackPanel panel = this.abc.LoadContent() as StackPanel; // CheckBox checkBox = panel.FindName("checkBox1") as CheckBox; // if (checkBox.IsChecked == false) // { // checkBox.IsChecked = true; // } // else // { // checkBox.IsChecked = false; // } /* if (this.radgridview1.SelectedItem is People) { People ac = this.radgridview1.SelectedItem as People; if (ac.ValidatedEnable == false) { ac.ValidatedEnable = true; } else { ac.ValidatedEnable = false; } if (ac.ValidatedEnable) btnChangeValidated.Content = "Save Validate"; else btnChangeValidated.Content = "Edit Validate"; } */ if (_listPeople != null) { foreach (People pc in _listPeople) { if (pc.ValidatedEnable == false) { pc.ValidatedEnable = true; } else { pc.ValidatedEnable = false; } } if (tbedit.Text=="Edit" && tbvalidate.Text=="Validate") { tbedit.Text = "Save"; tbvalidate.Text = "Validate"; //btnChangeValidated.Content = "Save Validate"; } else { tbedit.Text = "Edit"; tbvalidate.Text = "Validate"; //btnChangeValidated.Content = "Edit Validate"; } } } } }类代码:
using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.ComponentModel; using System.Collections.ObjectModel; namespace SilverlightApplication8 { public class People : INotifyPropertyChanged { private string _title; public string Title { get { return _title; } set { if (value != this._title) { this._title = value; NotifyPropertyChanged("Title"); } } } private string _openedBy; public string OpenedBy { get { return _openedBy; } set { if (value != this._openedBy) { this._openedBy = value; NotifyPropertyChanged("OpenedBy"); } } } private DateTime _opentime; public DateTime OpenTime { get { return _opentime; } set { if (value != this._opentime) { this._opentime = value; NotifyPropertyChanged("OpenTime"); } } } private string _content; public string Content { get { return _content; } set { if (value != this._content) { this._content = value; NotifyPropertyChanged("Content"); } } } private bool _Validated; public bool Validated { get { return _Validated; } set { if (value != this._Validated) { this._Validated = value; NotifyPropertyChanged("Validated"); } } } private bool _ValidatedEnable; public bool ValidatedEnable { get { return _ValidatedEnable; } set { if (value != this._ValidatedEnable) { this._ValidatedEnable = value; NotifyPropertyChanged("ValidatedEnable"); } } } private string _Age; public string Age { get { return _Age; } set { if (value != this._Age) { this._Age = value; NotifyPropertyChanged("Age"); } } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String propertyName = "") { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } } } }
其中有一些代码是被注释调的,虽然运行的时候没有什么作用,不过我觉得也是一种学习的方法,所以没有删除,知识注释,对功能没有任何影响。这个例子中用到的关键技术是在这个类文件里INotifyPropertyChanged接口,用来提供更改的通知,虽然不是很明白,不过确实很有用。
更改SL首次启动的界面的方法很简单,只要在App.xaml的代码里稍作修改即可:
public partial class App : Application { Grid rootGrid = new Grid(); private void Application_Startup(object sender,StartupEventArgs e) { this.RootVisual = rootGrid; this.rootGrid.Children.Add(new Login());//Login是要打开的第一个界面的名字 } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。