如何将选定项目或单击事件添加到自定义日历?

时间:2014-01-07 10:14:20

标签: c# wpf onclick calendar selecteditem

我有一个自定义日历控件,它将文本与日期相关联,而不是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,因为没有单独的对象可以工作用,如按钮。

对于如何做到这一点有什么建议吗?

Calendar Example 所以这是日历,对于那些不理解的人,我只需要点击某一天它就可以引发点击事件,但就像我之前所说的那样,这个日历控件还没有,因此,我正在寻找创造这种方式的最佳方式。

我可以提出的唯一额外细节是,您可以依次查看每一天的项目:

foreach (Day item in Calendar.Days)
            {

            }

1 个答案:

答案 0 :(得分:1)

好的,所以我看到这个工作的方式很简单。您可以在日历中的每一天使用Button,也可以在每天由当前组成的任何元素上使用PreviewMouseDown个事件之一。

就个人而言,我宁愿选择Button,或者进一步思考,ToggleButton会更好。 ToggleButton具有IsChecked属性,您可以使用转换器将其绑定到Background属性,或者甚至只是Trigger。这样,您可以轻松突出显示所选日期。