将 WPF 控件扩展到下拉列表中

Extending a WPF control into a dropdown

我使用 WPF 和 "vanilla" 控件进行开发已经有一段时间了,但我遇到了一个没有什么恰到好处的场景。

我一直在寻找 TimePicker 控件,我的限制是我正在寻找可以免费使用和分发的东西。我找到了一个看起来几乎是理想的控件。

https://www.roy-t.nl/2016/03/05/customizable-touch-friendly-timepicker-clock-for-wpf.html 提供。这已经作为 WPF 控件存在,我可以编写一个测试应用程序并使用它。用户拉动双手(我在非触摸笔记本电脑上使用鼠标)并设置时间。我没有设置秒数的要求,所以....理想。

差不多。唯一的问题是这个控件是平面的,它现在占用的 150x150 像素或其他大小的空间是固定的。

我正在考虑将其放入某种下拉菜单 [popup],我想就像 Microsoft 的 DatePicker 控件一样。一个控件,当收缩时,将只显示数字时间(只读),但当展开时,将显示此控件并允许设置时间。与 DatePicker 显示日历的方式相同。

问题是我不确定如何做才是最好的。我不确定我要承担什么样的任务。有人可以给我一些指示吗?并告诉我任务的规模?您是否看过类似的示例,以便我了解所涉及代码的数量和复杂性?当我完成时,此控件将位于一个对话框上,该对话框将位于一个应用程序内,在该应用程序中,捕获时间只是功能的一小部分。此外,iirc 应用程序中只有一个地方需要记录时间。因此,虽然我希望我的控件看起来尽可能好,但我不想在开发 "just" 控件时陷入困境。

(已签约)

(展开)

巧合的是,我也一直在为我自己的项目寻找时间选择器控件。 我不需要可拖动的手,所以我只做两个微调器。 这将在用户控件中。

如果您不介意它不可重新模板化,那么这不是一项艰巨的工作。 模板意味着更难的自定义控件。 固定外观可以在用户控件中工作。

下拉菜单通常意味着弹出窗口。 或者至少是你的东西放进去的容器。 https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/popup-overview 这是一个单独的 window 到包含的那个,所以如果你说在打开时将浏览器 window 拖到它上面,那么你会发现奇怪的事情发生了。 弹出窗口将出现在浏览器的顶部。 弹出窗口相当容易使用。 您可以使用与上下文菜单类似的方式设置数据上下文。

 x:Name="myPopup" 
 DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Mode=Self}}"

另一种选择是装饰器。 它们进入一个特殊的层,该层位于 window 中其他所有内容之上。 但它们在 window 中 - 所以如果你有一个显示并将该浏览器 window 拖到它上面,浏览器将在顶部。

这是否重要取决于 popup/adorner 的短暂性。它通常不被认为是组合框的问题。 如果您以前从未使用过装饰器,则很难使用它们。 有些人已经跨过那座桥并创建了可重用的方法:

http://www.nbdtech.com/Blog/archive/2010/07/12/wpf-adorners-part-4-ndash-simple-and-powerful-system-for.aspx