我有一个 C# 应用程序,它有一个现有的 WinForm,我现在需要倒置显示。
该应用程序将显示在触摸屏 Windows 7 设备上。如果两个人在使用该设备,则一个人正面朝上观看它,而另一个用户同时倒着观看它。我需要让一个控件正面朝上显示,而另一个控件则上下颠倒显示,每个控件都是重复的形式。两者都需要起作用。标题栏和 Windows 的关闭、最大化和最小化不需要旋转。
有没有一种方法可以轻松旋转此表单及其所有内容,而无需从头开始重写?
不幸的是,在 WinForms 中不能直接旋转控件。
至少,如果您希望它们保留其功能,则不会。将控件绘制到位图中,旋转位图,然后将其绘制回窗体上的所需位置会相对简单。但是您显然会失去与控件交互的能力。他们只是他们原始自我的静态代表。
但是制作功能性颠倒控制是不会发生的。我的意思是,您可以尝试为自绘控件编写一堆自定义绘图代码,但您仍然会遇到一堆错误、极端情况和兼容性问题。WinForms 所基于的 Win32 控件不支持这一点。考虑到它们是在 20 到 25 年前发明的,这真的不足为奇,在任何人想到可以放在口袋里随身携带并可以向任何方向旋转的电脑屏幕之前,它们就已经被发明了。像 WPF 这样的 UI 技术在触摸屏和平板电脑出现的时候出现是有充分理由的。
在翻转整个屏幕时可以探索一些可能性,但是当您希望不同的控件走向不同的方向时,这将无济于事。(当我这么说的时候,我想它背叛了我作为桌面应用程序人员的优势,但这听起来像是一个令人难以置信的混乱 UI。)
如果您绝对必须拥有它,那么其他人将不得不为您提供另一条破解它的途径,也许是按照 Dhawalk 的评论:在 WPF 应用程序中托管 WinForms 控件,该应用程序确实为旋转控件提供内置支持. 我对此知之甚少,无法在这条道路上提出任何具体建议。从几分钟的搜索来看,WindowsFormsHost 似乎实际上并不支持旋转变换,所以无论如何这可能是一个非首发。