【发布时间】:2010-08-18 01:46:24
【问题描述】:
我有一个扩展的日历控件,它绑定到一个包含日期和状态值的类。这个想法本质上是区分国定假日、国定假日和个人休假。我使用转换器以不同的颜色呈现这些,该转换器根据与日历控件关联的对象列表检查当前日期,以便为 CalendarDay 中的元素选择填充颜色。这一切都很完美。
问题是我想支持当用户点击某一天(在给定模式下)时,他们可以选择或取消选择该日期作为休息日/节假日。使用 PreviewMouseDown 我通过选定的数据上下文(日期时间)选择对象并更新它的状态。这工作正常,但是我无法让日历控件执行刷新。
日历未绑定到我的自定义类,我不确定 CalendarDay 的确切绑定方式,但它似乎只有一个指向 DateTime 值的数据上下文。所以 NotifyPropertyChanged 出来了。如果我单击一个日期并切换月份并返回该日期按预期突出显示,我需要告诉日历重新绘制。我一直在寻找有关强制重绘的示例,但到目前为止没有任何效果。
我已经尝试过 UpdateLayout() 等。我不知道这是否是一个问题,因为我试图从鼠标事件中重新渲染。任何想法如何重新绘制日历控件以便可以启动转换器?
【问题讨论】:
-
好的,我想我在这方面取得了一些进展,但还不是 100%。如果我添加这个: var test = VisualTreeHelper.GetChild(VisualTreeHelper.GetParent(e.OriginalSource as DependencyObject), 1) as Rectangle; test.Fill = new SolidColorBrush(Colors.Red); ...单击一天时的 mousedown 事件,我可以更改 CalendarDay 中元素的填充。我希望这会引发转换器覆盖设置的布局。不幸的是,它似乎已经覆盖了模板颜色。 (每个月的那一天都是红色的。)
标签: wpf