【问题标题】:Need a "grid" of stackpanels to be used as a calendar需要将堆栈面板的“网格”用作日历
【发布时间】:2019-08-15 23:20:07
【问题描述】:

最终,我的目标是创建一个网格(网格是指行和列,但它已经实现),以表示一天中的时间间隔。我认为与以下内容没有太大不同(右侧的简单日历类型布局):


(来源:msdn.com

我需要一种动态创建此网格的方法,并在触发事件时适当地命名面板(具体来说 - 一个放置事件,每个面板的放置事件将连接到相同的方法,我必须区分哪个面板(即在一天中的什么时候,在哪一行)该项目被丢弃了)。

非常感谢您的帮助!

【问题讨论】:

    标签: c# wpf stackpanel


    【解决方案1】:

    您可能无法从此处获得执行此操作的完整代码,但我可以为您指明正确的方向。

    您可能想要使用嵌套的ItemsControl。我过去做过类似的事情,我的日历外部ItemsControlGrid,网格单元包含一个内部ItemsControlStackPanelTaskItems

    最重要的部分是正确设置数据层。我使用了CalendarDayModel 类,它有一个Date 属性和一个ObservableCollection<TaskModel> 列表。它还具有处理用户事件的命令,例如双击事件。

    我的外部ItemsControl 绑定到ObservableCollection<CalendarDayModel>,内部ItemsControl 绑定到ObservableCollection<TaskModel>

    我有一些 ItemsControl here 的示例,但请注意最后一个使用 Grid 的示例。

    【讨论】:

    • 非常感谢 Rachel,这太棒了 - 非常感谢您的反馈。我了解如何对数据进行建模和存储列表可能是最棘手的部分之一,但我只是简单地采用您所做的方法。不过,我目前担心的是,关于哪一天/stackpanel 调用了 drop 事件处理程序,我实际上将如何区分单元格/一天中的时间。我必须以某种方式动态命名堆栈面板,不是吗!?请原谅我的问题 - 对 WPF 来说很新,嗯 - 很新,我已经忙于这个项目了。
    • @DanielMcNulty 这取决于您如何拥有数据结构。您可以在单元格的 DataItem 上处理处理拖放项目的命令,因此拖放项目将执行特定单元格的事件并将拖动的项目作为参数传递给它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多