1

我需要 WPF 中的年历,即一个控件中的 12 个日历(每月一个)。这可以通过创建一个具有 12 个日历的新控件并禁用下一个/上一个按钮...等来完成。

我的主要问题是,我需要允许用户选择多个范围日期,即使这些日期是两个不同的月份。例如,当用户单击 1 月 20 日,然后按住 shift 然后单击 2 月 10 日,则必须选择 1 月 20 日至 2 月 10 日之间的日期。

可能吗?

4

1 回答 1

2

只要有足够的时间和精力,一切皆有可能,但是您的建议可能会占用您大量的时间,以便允许用户以这种方式选择日期范围。

(在本次讨论中,我将假设您始终有 365 天的固定年份可供选择,即使可能是 2013 年 11 月至 2014 年 10 月。考虑动态范围将使一切变得更具挑战性)

如果您有多个日历,他们将不知道如何使选定范围保持同步。如果您正在构建它,首先要解决的是生成一个只读的年份日历,以便给定一年,您可以突出显示所有日历中的选定部分。之后,您将处理简单的交互,例如如果用户在一个日历中进行移位选择,那么您可以重用您的工作来显示您在上面所做的只读范围。但是,如果您希望您的用户能够跨多个日历拖动选择,您会发现它要困难得多。在日历中传递鼠标的状态需要大量的同步。

在这一点上,您可能会发现拥有日历所涉及的工作可以更好地用于获取已经可以处理此问题的控件,例如 devexpress、syncfusion 等,或者甚至构建您自己的。

就我个人而言,我会使用两个日期下拉菜单来精确选择开始和停止的日期,然后对一年中的范围进行只读表示。如果这还不够,那么看看使用双滑块控件(搜索WPF 双滑块以获取商业和开源选项)。然后,这将为您提供一种简单的方法来拖动一年中的开始或结束日期。

你可以简单地从上面使用你的只读视图,甚至只是一个简单的边框来显示范围。将边框 Margin.Left 绑定到自年初以来的天数 / 365 * totalWidth 并将其 Width 绑定到两个日期之间的天数 /365 * totalWidth。

最后,您可以简单地将只读日历保留为视图中唯一可见的组件,并将它们与其他事物配对以在用户与它们交互时进行选择。当鼠标在日历上单击时,可能会弹出一对下拉菜单。

于 2013-11-08T09:31:36.103 回答