如何在分组资源的Telerik WinForms RadScheduler时间线视图中设置固定行列宽高?
为Telerik UI for WinForms RadScheduler的时间线视图(按资源分组)设置固定行高和列宽
我来帮你搞定这个问题——在按资源分组的时间线视图里,默认的Resources per view属性确实会随资源数量自动调整行高,要实现固定行高和列宽,得用下面这些具体的方法:
一、固定资源行高
这里有两种常用的实现方式,你可以根据自己的场景选择:
方式1:通过ViewChanged事件动态设置
在窗体初始化的时候,给RadScheduler订阅ViewChanged事件,当切换到时间线视图时,直接修改视图元素的资源行高:
private void RadScheduler1_ViewChanged(object sender, EventArgs e) { var timelineViewElement = radScheduler1.SchedulerElement.ViewElement as SchedulerTimelineViewElement; if (timelineViewElement != null) { // 把这里的50改成你需要的固定高度(单位:像素) timelineViewElement.ResourceRowHeight = 50; // 强制刷新视图,让设置立即生效 radScheduler1.SchedulerElement.UpdateLayout(); } }
方式2:自定义视图元素(全局固定)
如果希望整个应用里的时间线视图都用固定行高,可以自定义SchedulerTimelineViewElement:
public class CustomTimelineViewElement : SchedulerTimelineViewElement { protected override void InitializeRows() { base.InitializeRows(); // 设置固定行高 this.ResourceRowHeight = 50; } }
然后在RadScheduler的CreateViewElement事件里替换默认的视图元素:
private void RadScheduler1_CreateViewElement(object sender, CreateViewElementEventArgs e) { if (e.ViewType == typeof(TimelineView)) { e.ViewElement = new CustomTimelineViewElement(); } }
二、固定时间列宽度
这个就简单多了,直接获取时间线视图的实例,设置TimeSlotWidth属性为固定像素值就行:
// 获取当前的时间线视图 var timelineView = radScheduler1.GetView<TimelineView>(); // 设置固定列宽,比如100像素 timelineView.TimeSlotWidth = 100;
小提示
- 设置完属性后,记得调用
radScheduler1.Refresh()或者radScheduler1.SchedulerElement.UpdateLayout(),确保视图立刻更新 - 如果你还保留了
Resources per view的设置,固定行高会覆盖它的自动调整行为,所以可以根据需求决定是否保留该属性
内容的提问来源于stack exchange,提问作者Safrin




