我有一个自定义日历控件,它将文本与日期相关联,而不是DatePicker控件样式。此自定义控件具有Day的类,其中包含属性Notes:
public string Notes
{
get { return notes; }
set
{
notes = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Notes"));
}
}
在实际的Calendar类中,我有一个事件处理程序:
public event EventHandler<DayChangedEventArgs> DayChanged;
我有一个触发事件的Day_Changed方法:
private void Day_Changed(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != "Notes") return;
if (DayChanged == null) return;
DayChanged(this, new DayChangedEventArgs(sender as Day));
}
public class DayChangedEventArgs : EventArgs
{
public Day Day { get; private set; }
public DayChangedEventArgs(Day day)
{
this.Day = day;
}
}
然后在实际表单上,我可以使用这个创建的事件DayChanged来触发表单背后的方法:
<PersonnelTracker:Calendar x:Name="Calendar" DayChanged="Calendar_DayChanged"/>
private void Calendar_DayChanged(object sender, DayChangedEventArgs e)
{
}
现在,我要做的是找到一种方法,可以在日历上选择日期或位置,并将其触发到表单背后的方法。我遇到的复杂情况是,日历控件本身没有点击事件,这意味着可能需要制作一个,但我不能使用MouseButtonEventArgs
,因为没有单独的对象可以工作用,如按钮。
对于如何做到这一点有什么建议吗?
所以这是日历,对于那些不理解的人,我只需要点击某一天它就可以引发点击事件,但就像我之前所说的那样,这个日历控件还没有,因此,我正在寻找创造这种方式的最佳方式。
我可以提出的唯一额外细节是,您可以依次查看每一天的项目:
foreach (Day item in Calendar.Days)
{
}
答案 0 :(得分:1)
好的,所以我看到这个工作的方式很简单。您可以在日历中的每一天使用Button
,也可以在每天由当前组成的任何元素上使用PreviewMouseDown
个事件之一。
就个人而言,我宁愿选择Button
,或者进一步思考,ToggleButton
会更好。 ToggleButton
具有IsChecked
属性,您可以使用转换器将其绑定到Background
属性,或者甚至只是Trigger
。这样,您可以轻松突出显示所选日期。