我希望在我的日历中显示可见日期,例如我想获得以下图片 2015年6月28日到 2015年8月8日
DisplayDateChanged 的所有内容都是
AddedDate = {01/07/2015 00:00:00}(7月1日)
RemovedDate = {25/06/2015 00:00:00}(6月25日)
起初我认为 DisplayDateStart 和 DisplayDateEnd 会给我这些信息,但我意识到这些属性不是只读的,而是我将它们设置为其他目的,例如将显示的日期范围。
那么任何变通方法或方法来计算或得到我想要的结果?
答案 0 :(得分:0)
我通过一些问题得到了答案,并在我的日历模板中进行了一些更改。
我点击编辑其他模板 / 编辑CalendarDayButtonStyle ,然后添加了以下内容:
<Setter Property="Tag" Value="{Binding Path=Date}" />
private void myCal_DisplayDateChanged(object sender, CalendarDateChangedEventArgs e)
{
var grid = FindVisualChildByName<Grid>(myCal, "MonthView");
DateTime? dtBegin = null;
DateTime? dtEnd = null;
if (grid != null && grid.Children.OfType<System.Windows.Controls.Primitives.CalendarDayButton>().Any())
{
foreach (var button in grid.Children.OfType<System.Windows.Controls.Primitives.CalendarDayButton>().Cast<System.Windows.Controls.Primitives.CalendarDayButton>())
{
if (dtBegin == null)
dtBegin = Convert.ToDateTime(button.Tag);
else
dtEnd = Convert.ToDateTime(button.Tag);
}
}
}
public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
string controlName = child.GetValue(Control.NameProperty) as string;
if (controlName == name)
{
return child as T;
}
else
{
T result = FindVisualChildByName<T>(child, name);
if (result != null)
return result;
}
}
return null;
}
Detecting when a day is clicked on the Silverlight Calendar control
https://pwnedcode.wordpress.com/2009/04/01/find-a-control-in-a-wpfsilverlight-visual-tree-by-name/