我试图在运行时禁用WPF窗口的最大化按钮:当我点击"禁用"按钮最大化按钮应禁用。
为此,我使用以下代码:
private const int GWL_STYLE = -16;
private const int WS_MAXIMIZEBOX = 0x10000;
[DllImport( "user32.dll" )]
private static extern int GetWindowLong( IntPtr hWnd, int nIndex );
[DllImport( "user32.dll" )]
private static extern int SetWindowLong( IntPtr hWnd, int nIndex, int dwNewLong );
public static void DisableMaximizeOf( Window window )
{
IntPtr winHandle = new WindowInteropHelper( window ).Handle;
// Get the current style and remove the WS_MAXIMIZEBOX bits
int style = GetWindowLong( winHandle, GWL_STYLE );
SetWindowLong( winHandle, GWL_STYLE, style & ~WS_MAXIMIZEBOX );
}
在调用DisableMaximizeOf(...)之后,最大化功能被正确禁用 - 唯一的问题是最大化按钮仍然像以前一样:
如果我将此窗口最小化并再次恢复,则会正确显示该按钮:
所以我尝试刷新GUI,但似乎没有任何效果。 这有解决方案吗?任何帮助将不胜感激。
答案 0 :(得分:1)
这是直接从PInvoke.net
获取的某些窗口数据被缓存,因此在调用SetWindowPos函数之前,使用SetWindowLong所做的更改不会生效。具体来说,如果更改任何框架样式,则必须使用SWP_FRAMECHANGED标志调用SetWindowPos,以便正确更新缓存。
答案 1 :(得分:0)
1)转到MainWindow.xaml页面,您可以在其中查看和设计表单。
2)打开XAML窗口并粘贴下面的代码,但替换" your_namespace"使用您的程序命名空间(参见附图)
xmlns:local="clr-namespace:your_namespace" ResizeMode="CanMinimize"
由于它的简单性,这可能是一个更好的选择。