Dev Express Xamarin Form Scheduler月视图仅当月首日显示为“1 Sep”格式的实现问题
解决方案
你之前的格式规则没有增加「是否为当前视图所属月份」的判断,按以下步骤调整即可:
- 不要直接全局修改月视图日头的通用格式规则,改用
SchedulerControl.CustomDrawDayHeader事件实现自定义绘制逻辑,该事件可以针对每个日期头单独判断渲染规则,不会全局生效。 - 事件内只需增加两层判断即可:
- 先判断当前绘制的日期是否为当月首日:
e.Interval.Start.Day == 1 - 再判断该日期所属的年月是否和Scheduler当前展示的月份一致:
e.Interval.Start.Month == schedulerControl1.ActiveView.GetVisibleIntervals().First().Start.Month && e.Interval.Start.Year == schedulerControl1.ActiveView.GetVisibleIntervals().First().Start.Year - 两层判断都通过后,再应用
d MMM格式的自定义文本,其余日期走默认渲染逻辑即可。
- 先判断当前绘制的日期是否为当月首日:
- 核心代码示例(WinForm平台为例,WPF/ASP.NET平台逻辑完全一致,仅事件名和属性调用略有差异):
private void schedulerControl1_CustomDrawDayHeader(object sender, CustomDrawDayHeaderEventArgs e) { DateTime currentViewMonth = schedulerControl1.ActiveView.GetVisibleIntervals().First().Start; // 仅处理当前展示月份的首日 if (e.Interval.Start.Day == 1 && e.Interval.Start.Month == currentViewMonth.Month && e.Interval.Start.Year == currentViewMonth.Year) { e.Cache.DrawString(e.Interval.Start.ToString("d MMM"), e.Appearance.Font, e.Appearance.GetForeBrush(e.Cache), e.Bounds, e.Appearance.GetStringFormat()); e.Handled = true; return; } // 其余日期走默认渲染 e.Handled = false; }
- 如果你的月视图配置了展示相邻月份的日期,上述判断逻辑会自动过滤相邻月的首日,无需额外调整。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

