我需要 WPF 中的一年日历,即在一个控件中包含 12 个日历(每月一个)。这可以通过创建一个包含 12 个日历的新控件并禁用下一个/上一个按钮...等来完成。
我的主要问题是,我需要允许用户选择多个范围日期,即使这些日期是两个不同的月份。例如,当用户单击 1 月 20 日,然后按住 Shift 键,然后单击 2 月 10 日,则必须选择 1 月 20 日至 2 月 10 日之间的日期。
这可能吗?
最佳答案
只要有足够的时间和精力,一切皆有可能,但是您所建议的内容可能会占用您大量的时间,以便让用户以这种方式选择日期范围。
(在本次讨论中,我假设您始终有 365 天的固定年份可供选择,即使可能是 2013 年 11 月 - 2014 年 10 月。考虑动态范围将使一切变得更具挑战性)
如果您有多个日历,它们将不知道如何保持所选范围同步。如果您正在构建这个,首先要解决的问题是生成一个只读年份日历,以便在给定的年份中突出显示所有日历中的选定部分。之后,您将处理简单的交互,例如如果用户在一个日历中进行切换选择,那么您可以重复使用您的工作来显示上面所做的只读范围。但是,如果您希望用户能够在多个日历之间拖动选择,您会发现这要困难得多。在日历之间传递鼠标状态需要大量的同步。
此时,您可能会发现,拥有日历所涉及的工作可以更好地花在获取已经可以处理此问题的控件(例如 devexpress、syncfusion 等)上,或者甚至构建自己的控件上。
就我个人而言,我会使用两个日期下拉列表来精确选择开始和停止的日期,然后获得全年范围的只读表示。如果这还不够,那么请考虑使用双 slider 控件(搜索WPF 双 slider 以获取商业和开源选项)。这将为您提供一种简单的方法来拖动一年中的开始或结束日期。
您可以简单地使用上面的只读 View ,甚至只是一个简单的边框来显示范围。将边框 Margin.Left 绑定(bind)到自年初以来的天数/365 *totalWidth,并将其宽度绑定(bind)到两个日期之间的天数/365 *totalWidth。
最后,您可以简单地将只读日历保留为 View 中唯一可见的组件,并将它们与其他事物配对,以便在用户与它们交互时进行选择。当鼠标在日历上单击时,可能会弹出一对下拉菜单。
关于wpf - 年历 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854391/