我正在开发一个Windows Phone应用程序,这里我从.net web-service获取XML数据。 web方法返回日期列表,只需要通过点或颜色在日历上突出显示这些日期,除此之外,我可以将选定日期作为输入传递给另一个Web方法,但无法同时突出显示日期列表。下面是我为它尝试的代码。
XElement xmlNews = XElement.Parse(e.Result.ToString());
Cal.DataContext = from item in xmlNews.Descendants("Events")
select new Institute()
{
Adress = item.Element("Event_From").Value
};
<wpControls:Calendar
x:Name="Cal" MonthChanged="Cal_MonthChanged" DatesSource="{Binding}" SelectedDate="{Binding Adress}"
MonthChanging="Cal_MonthChanging"
SelectionChanged="Cal_SelectionChanged"
DateClicked="Cal_DateClicked"
EnableGestures="True" Margin="2,-5,0,21" />
答案 0 :(得分:0)
我的猜测是您正在使用codeplex中Windows Phone Controls 7 库中提供的日历。 要根据需要自定义日历,您需要实现转换器并使其实现IDateToBrushConverter。此界面提供单个方法转换,日历将调用该方法转换以询问您要将哪个画笔用作指定日历案例的背景或前景。这里的技巧是你指定转换器的全局实例并为其提供从后端Web服务返回的日期,例如将其注入构造函数或将其指定为静态方法(我不喜欢)然后在您的转换方法中,检查日历大小写的日期是否在指定列表中,如果是,您根据需要返回所需的画笔 这是一个例子:
public class CalendarColorBackgroundConverter : IDateToBrushConverter
{
// ctor
public CalendarColorBackgroundConverter(IEnumerable<DateTime> datesToHighlight)
{
this.DatesToHighlight = datesToHighlight;
}
IEnumerable<DateTime> DatesToHighlight {get; private set;}
// some predefined brushes.
//static SolidColorBrush transparentBrush = new SolidColorBrush(Colors.Transparent);
static SolidColorBrush whiteColorBrush = new SolidColorBrush(Colors.White);
static SolidColorBrush selectedColorBrush = new SolidColorBrush(Colors.DarkGray);
static SolidColorBrush todayColorBrush = new SolidColorBrush(Color.FromArgb(255, 74, 128, 1));
static SolidColorBrush Foreground = new SolidColorBrush(Color.FromArgb(255, 108, 180, 195));
public Brush Convert(DateTime currentCalendarCaseDate, bool isSelected, Brush defaultValue, BrushType brushType)
{
var highlightDate = this.DatesToHighlight.Any(d => d.Year == currentCalendarCaseDate.Year && d.Month == currentCalendarCaseDateMonth.Month &&
d.Day == currentCalendarCaseDate.Day);
if (brushType == BrushType.Background)
{
if (highlightDate) // background brush color when the calendar case is selected
return todayColorBrush;
else
return whiteColorBrush;
}
else
{
if (highlightDate)
return whiteColorBrush;
return Foreground;
}
}
}
希望这有帮助。