谁喜欢挑战?
我目前正在研究ControlTemplate
无铬合金Window
,它将成为可重用主题程序集的一部分。我希望移动、关闭、最小化和恢复的行为是隐式的,因此我为此功能编写了附加行为,然后将其包含在模板中。
现在,..我来调整大小,我来到了一个路口。无论好坏,我都在处理行为中的鼠标移动并查找光标是否在调整大小的“区域”内。我已经足够适当地更改光标,但现在我已经开始实际调整窗口大小了,我遇到了三个选项。
我可以根据需要手动调整左侧和顶部以及宽度和高度。这是最简单的选项,使用附加行为很容易实现,但它似乎有点繁重,我知道 WPF 将继续渲染,因为窗口被调整导致闪烁,......这很糟糕。
第二种选择是获取消息挂钩并监听 WM_NCHITTEST 等,但到目前为止我发现的解决方案涉及我的子类化Window
,我不想强迫主题的消费者使用任何不是的控件提供的框架。
最后一个选项是以某种方式在屏幕上绘制一个矩形,显示Window
拖动鼠标时将占用的空间,然后调整大小MouseUp
,..这似乎是可行的,但这不是我以前做过的事情,所以一些指针会是凉爽的。
所以我该怎么做?到目前为止,Win32 路线似乎是我最好的选择,但如果有人有一个“更纯粹”的解决方案,我宁愿不要。我很高兴收到有关选项 3 和 .Net 4 的任何建议,以防万一有dynamic
可能发生一些魔术。
提前致谢。