So what am I missing with this here WPF?背景:我有一个视频播放应用程序,它的界面受古老的Sasami2k的启发,刚刚更新为使用VMR9(即Direct3D9和DirectShow),并且不那么不稳定。当前,它是一个使用原始Win32的C应用程序,这是必要的:各种工具包都不值得该死。特别是WPF,由于其空域限制而无法使用。 好的,因此,既然D3DImage存在,则可以将D3D / VMR9 / DirectShow和WPF混合并匹配。鉴于过去对Win32的不可扩展性感到沮丧,这似乎是一件好事。 但是你知道,我在这里遇到了第一个障碍。 使用Win32,我(非常容易地)创建了一个无边界窗口,该窗口可调整大小,按比例调整大小,捕捉到屏幕边缘,并在最大化时占据整个屏幕(包括任务栏区域)。这是一个视频应用程序,因此这些都是非常理想的属性。 好,那么,如何使用WPF进行相同的操作? 在Win32中,我使用: 但是,看看WPF,似乎各种事件来得太晚了,除非我对文档有误解? 例如,我不知道何时移动,因为LocationChanged表示仅在窗口移动后才触发(为时已晚)。 而且我似乎完全忽略了系统告诉我有关调整大小的地方。同样是命中测试。 所以,嗯,我在这里错过了什么吗?还是别无选择,只能退回去钩住这个东西的wndproc了?我可以不挂WndProc而做我想做的事吗? 如果我必须使用WndProc,那么我最好还是坚持使用现有的代码库。我想拥有更简单,更简洁的UI代码,而离开WndProc对此至关重要。 如果我必须钩住WndProc,我想知道-为什么? Win32拥有调整大小/大小,移动/移动,poschanging / poschanged窗口消息,它们都很有用。 WPF为什么不复制同一组事件?似乎在功能上存在不必要的差距。 此外,这意味着WPF已绑定到特定于USER32的特定实现。这意味着MS不能(例如在Windows 7或8中)反转显示层以使WPF成为"本机",并且不能模仿旧版应用程序的HWND和WndProcs,即使这正是MS应该做的。 好吧,要回答我自己的问题,我很想念Adorners(在我进行的任何搜索中都没有回来,因此似乎并没有像应该的那样广为人知)。 不幸的是,它们似乎比WndProc覆盖的要复杂得多,但是我认为应该有可能让它们处理我想要的事情。
对于调整大小,您确实缺少SizeChanged事件。 中的窗口上没有OnSizeChanging,OnLocationChanging和OnStateChanging事件
它不会连续触发,但是您可以使用ResizeBegin和ResizeEnd事件并能够执行该操作。
嗯,你是对的。 在代码中,您可以将WindowStyle属性设置为" None",将WindowsState设置为" Maximized"。 我不确定Xaml是什么样子。 您是否可以覆盖ArrangeOverride和/或MeasureOverride来弥补那些丢失的调整大小事件?度量是第一遍,在布局需要调整为新大小时发生,因此有点像大小更改事件。 |