稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[1] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[2] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[3] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[4] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[2] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[3] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
[4] 稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
系列文章导航:
稳扎稳打Silverlight(1) - 1.0实例之电子表
稳扎稳打Silverlight(2) - 1.0实例之支持录音和回放的钢琴(Silverlight+ASP.NET AJAX+DLINQ)
稳扎稳打Silverlight(3) - 2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
3、Calendar.xaml
<!--
Calendar控件的命名空间和其他控件一样,都是在System.Windows.Controls下
但是其是在System.Windows.Controls.dll程序集中定义的
所以要引入相应的xml命名空间
-->
<UserControl x:Class="Silverlight20.Control.Calendar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls">
<StackPanel HorizontalAlignment="Left">
<TextBox x:Name="txtMsg" Margin="5" />
<!--
SelectedDatesChanged - 选中日期后所触发的事件
DisplayDateEnd - 此日期之后的日期不予显示
DisplayDateStart - 此日期之前的日期不予显示
FirstDayOfWeek - 控件所显示的每星期的第一天为星期几 [System.DayOfWeek枚举]
DisplayMode - 控件的显示模式 [System.Windows.Controls.DisplayMode枚举]
DisplayMode.Month - 标题显示年月,内容显示日期。默认值
DisplayMode.Year - 标题显示年,内容显示月
DisplayMode.Decade - 标题显示一个十年的区间,内容显示年
IsTodayHighlighted - 是否高亮显示今天的日期
-->
<basics:Calendar x:Name="calendar" Margin="5" FirstDayOfWeek="Monday"
SelectedDatesChanged="calendar_SelectedDatesChanged">
</basics:Calendar>
<StackPanel Orientation="Horizontal">
<CheckBox Content="禁止选择今天以前的日期" Margin="5"
Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
<RadioButton GroupName="selectionMode" x:Name="SingleDate" Content="可选单一日期" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="None" Content="不可选日期" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="SingleRange" Content
="可选连续日期(shift)" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="MultipleRange"
Content="可选多个日期(ctrl)" Margin="5"
Checked="selectionMode_Changed" />
</StackPanel>
</StackPanel>
</UserControl>
Calendar控件的命名空间和其他控件一样,都是在System.Windows.Controls下
但是其是在System.Windows.Controls.dll程序集中定义的
所以要引入相应的xml命名空间
-->
<UserControl x:Class="Silverlight20.Control.Calendar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls">
<StackPanel HorizontalAlignment="Left">
<TextBox x:Name="txtMsg" Margin="5" />
<!--
SelectedDatesChanged - 选中日期后所触发的事件
DisplayDateEnd - 此日期之后的日期不予显示
DisplayDateStart - 此日期之前的日期不予显示
FirstDayOfWeek - 控件所显示的每星期的第一天为星期几 [System.DayOfWeek枚举]
DisplayMode - 控件的显示模式 [System.Windows.Controls.DisplayMode枚举]
DisplayMode.Month - 标题显示年月,内容显示日期。默认值
DisplayMode.Year - 标题显示年,内容显示月
DisplayMode.Decade - 标题显示一个十年的区间,内容显示年
IsTodayHighlighted - 是否高亮显示今天的日期
-->
<basics:Calendar x:Name="calendar" Margin="5" FirstDayOfWeek="Monday"
SelectedDatesChanged="calendar_SelectedDatesChanged">
</basics:Calendar>
<StackPanel Orientation="Horizontal">
<CheckBox Content="禁止选择今天以前的日期" Margin="5"
Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" />
<RadioButton GroupName="selectionMode" x:Name="SingleDate" Content="可选单一日期" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="None" Content="不可选日期" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="SingleRange" Content
="可选连续日期(shift)" Margin="5"
Checked="selectionMode_Changed" />
<RadioButton GroupName="selectionMode" x:Name="MultipleRange"
Content="可选多个日期(ctrl)" Margin="5"
Checked="selectionMode_Changed" />
</StackPanel>
</StackPanel>
</UserControl>
Calendar.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 Silverlight20.Control
{
public partial class Calendar : UserControl
{
public Calendar()
{
InitializeComponent();
}
private void calendar_SelectedDatesChanged(object sender,
SelectionChangedEventArgs e)
{
// Calendar.SelectedDate - 选中的日期
// Calendar.SelectedDates - 选中的多个日期集合
this.txtMsg.Text = "";
foreach (DateTime dt in calendar.SelectedDates)
{
this.txtMsg.Text += dt.ToString("yyyy-MM-dd");
this.txtMsg.Text += " ";
}
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
if (this.calendar.SelectedDate != null && this.calendar.SelectedDate
< DateTime.Now.Date)
this.calendar.SelectedDate = DateTime.Now;
// Calendar.BlackoutDates - 不允许选择的日期集合
// Calendar.BlackoutDates.AddDatesInPast() - 禁止选择今天之前的日期
this.calendar.BlackoutDates.AddDatesInPast();
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
// Calendar.BlackoutDates.Clear() - 清除 不允许选择的日期集合 的设置
this.calendar.BlackoutDates.Clear();
}
private void selectionMode_Changed(object sender, RoutedEventArgs e)
{
// CalendarSelectionMode.None - 禁止选择日期
// CalendarSelectionMode.SingleRange - 可以选择多个日期,连续日期(Shift键配合)
// CalendarSelectionMode.MultipleRange - 可以选择多个日期,任意日期(Ctrl键配合)
// CalendarSelectionMode.SingleDate - 只能选择一个日期
switch (((System.Windows.Controls.RadioButton)sender).Name)
{
case "None":
this.calendar.SelectionMode = CalendarSelectionMode.None;
break;
case "SingleRange":
this.calendar.SelectionMode = CalendarSelectionMode.SingleRange;
break;
case "MultipleRange":
this.calendar.SelectionMode = CalendarSelectionMode.MultipleRange;
break;
default:
this.calendar.SelectionMode = CalendarSelectionMode.SingleDate;
break;
}
}
}
}
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 Silverlight20.Control
{
public partial class Calendar : UserControl
{
public Calendar()
{
InitializeComponent();
}
private void calendar_SelectedDatesChanged(object sender,
SelectionChangedEventArgs e)
{
// Calendar.SelectedDate - 选中的日期
// Calendar.SelectedDates - 选中的多个日期集合
this.txtMsg.Text = "";
foreach (DateTime dt in calendar.SelectedDates)
{
this.txtMsg.Text += dt.ToString("yyyy-MM-dd");
this.txtMsg.Text += " ";
}
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
if (this.calendar.SelectedDate != null && this.calendar.SelectedDate
< DateTime.Now.Date)
this.calendar.SelectedDate = DateTime.Now;
// Calendar.BlackoutDates - 不允许选择的日期集合
// Calendar.BlackoutDates.AddDatesInPast() - 禁止选择今天之前的日期
this.calendar.BlackoutDates.AddDatesInPast();
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
// Calendar.BlackoutDates.Clear() - 清除 不允许选择的日期集合 的设置
this.calendar.BlackoutDates.Clear();
}
private void selectionMode_Changed(object sender, RoutedEventArgs e)
{
// CalendarSelectionMode.None - 禁止选择日期
// CalendarSelectionMode.SingleRange - 可以选择多个日期,连续日期(Shift键配合)
// CalendarSelectionMode.MultipleRange - 可以选择多个日期,任意日期(Ctrl键配合)
// CalendarSelectionMode.SingleDate - 只能选择一个日期
switch (((System.Windows.Controls.RadioButton)sender).Name)
{
case "None":
this.calendar.SelectionMode = CalendarSelectionMode.None;
break;
case "SingleRange":
this.calendar.SelectionMode = CalendarSelectionMode.SingleRange;
break;
case "MultipleRange":
this.calendar.SelectionMode = CalendarSelectionMode.MultipleRange;
break;
default:
this.calendar.SelectionMode = CalendarSelectionMode.SingleDate;
break;
}
}
}
}