[WPF]自由配置窗体最大化、最小化按钮是否可用,窗口大小不可改变
2011-01-24 17:06
691 查看
最近做项目碰到一个需求,要求该窗体禁用最大化按钮,但是保留最小化按钮。窗体大小不可改变。
献贴上效果图
下面是具体做法:
1. 自定义了两个DependencyProperty,具体实现需要用到User32.dll中的函数。代码如下:
2. 在窗体中使用这两个Property,就可以自由enable/disable最大化和最小化按钮了。需要注意,ResizeMode需设置为CanResize,否则最大化和最小化按钮都会隐藏。
使用如上方法,基本可以满足各种对窗体大小的需求了。FYI ^^
---------------------------------------------------------------------------------------------------------------------
参考:http://thrash505.wordpress.com/2010/04/19/wpf-window-disable-minimize-and-maximize-buttons-through-attached-properties-from-xaml
献贴上效果图
下面是具体做法:
1. 自定义了两个DependencyProperty,具体实现需要用到User32.dll中的函数。代码如下:
public static class WindowHelper { private const Int32 GWL_STYLE = -16; private const Int32 WS_MAXIMIZEBOX = 0x00010000; private const Int32 WS_MINIMIZEBOX = 0x00020000; [DllImport("User32.dll", EntryPoint = "GetWindowLong")] private extern static Int32 GetWindowLongPtr(IntPtr hWnd, Int32 nIndex); [DllImport("User32.dll", EntryPoint = "SetWindowLong")] private extern static Int32 SetWindowLongPtr(IntPtr hWnd, Int32 nIndex, Int32 dwNewLong); /// <summary> /// Disables the maximize functionality of a WPF window. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void DisableMaximize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle & ~WS_MAXIMIZEBOX); } } /// <summary> /// Disables the minimize functionality of a WPF window. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void DisableMinimize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle & ~WS_MINIMIZEBOX); } } /// <summary> /// Enables the maximize functionality of a WPF window. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void EnableMaximize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle | WS_MAXIMIZEBOX); } } /// <summary> /// Enables the minimize functionality of a WPF window. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void EnableMinimize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle | WS_MINIMIZEBOX); } } /// <summary> /// Toggles the enabled state of a WPF window's maximize functionality. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void ToggleMaximize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); if ((windowStyle | WS_MAXIMIZEBOX) == windowStyle) { SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle & ~WS_MAXIMIZEBOX); } else { SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle | WS_MAXIMIZEBOX); } } } /// <summary> /// Toggles the enabled state of a WPF window's minimize functionality. /// </summary> /// <param name="window">The WPF window to be modified.</param> public static void ToggleMinimize(Window window) { lock (window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; Int32 windowStyle = GetWindowLongPtr(hWnd, GWL_STYLE); if ((windowStyle | WS_MINIMIZEBOX) == windowStyle) { SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle & ~WS_MINIMIZEBOX); } else { SetWindowLongPtr(hWnd, GWL_STYLE, windowStyle | WS_MINIMIZEBOX); } } } }
2. 在窗体中使用这两个Property,就可以自由enable/disable最大化和最小化按钮了。需要注意,ResizeMode需设置为CanResize,否则最大化和最小化按钮都会隐藏。
3. 禁止Resize,实际上只是把窗口的MinSize和MaxSize设置成一样即可。 private void Window_Loaded(object sender, RoutedEventArgs e) { this.MaxHeight = this.Height; this.MinHeight = this.Height; this.MaxWidth = this.Width; this.MinWidth = this.Width; }
使用如上方法,基本可以满足各种对窗体大小的需求了。FYI ^^
---------------------------------------------------------------------------------------------------------------------
参考:http://thrash505.wordpress.com/2010/04/19/wpf-window-disable-minimize-and-maximize-buttons-through-attached-properties-from-xaml
相关文章推荐
- [Win32]只允许最大化最小化窗口,禁止双击标题栏、拖动窗体、点击复原按钮来改变窗口大小
- 设计一个如下图所示窗体:该窗体自动位于屏幕中央;大小不可调;最小化、最大化按钮不可用;窗体标题为“烟台大学”。在该窗体上,放置一个按钮、一个标签。单击按钮时,在标签上显示当前系统时间。
- MFC禁止窗口最大化按钮和禁止改变窗口大小
- 【WPF】Window窗体禁用最大化/最小化按钮
- (转)WPF中让窗体不显示最大化,最小化,关闭按钮
- WPF窗体最大化、最小化、关闭按钮的隐藏和禁用
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
- 使C# 窗体的关闭按钮、最小化、最大化按钮不可用
- WPF窗体去掉最大化,最小化按钮
- WPF中让窗体不显示最大化,最小化,关闭按钮
- 使C# 窗体的关闭按钮、最小化、最大化按钮不可用
- MFC禁止窗口最大化按钮和禁止改变窗口大小
- vba窗体添加最大化最小化按钮,并且可以运行时调整大小
- 关于MFC禁止窗口最大化按钮和禁止改变窗口大小
- iPhone手机解锁效果&&自定义滚动条&&拖拽--Clone&&窗口拖拽(改变大小/最小化/最大化/还原/关闭)
- c#中窗口中最大化、最小化按钮及窗口固定大小
- WPF窗体去掉最大化,最小化按钮。
- MFC禁止窗口最大化按钮和禁止鼠标改变窗口大小的操作
- MFC禁止窗口最大化按钮和禁止改变窗口大小