wpf中,隐藏或去除window右上角的关闭按钮

window右上角的关闭按钮,wpf没有提供可操作的方法,所以借助user32.dll的api。

第一种方法:
只能disable 关闭按钮。

[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
        private static extern IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);
        [DllImport("USER32.DLL ", CharSet = CharSet.Unicode)]
        private static extern UInt32 RemoveMenu(IntPtr hMenu, UInt32 nPosition, UInt32 wFlags);
        private const UInt32 SC_CLOSE = 0x0000F060;
        private const UInt32 MF_BYCOMMAND = 0x00000000;

在window的loaded事件中添加:
var hwnd = new WindowInteropHelper(this).Handle;  //获取window的句柄
IntPtr hMenu = GetSystemMenu(hwnd, 0);
RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);


第二种方法:
彻底去除关闭按钮。

private const int GWL_STYLE = -16;
        private const int WS_SYSMENU = 0x80000;
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
        [DllImport("user32.dll")]
        private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
在window的loaded事件中添加:
var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);


Windows Presentation Foundation (WPF) 中,如果想要移除默认窗口上的最小化、最大化和关闭按钮,你可以通过自定义`WindowChrome`直接操作窗口样式来实现。这里提供一种简单的方法: 1. **自定义WindowChrome**: 首先,你需要创建一个自定义的`WindowChrome`,并设置其`WindowChrome`属性,例如: ```xml <Window x:Class="YourNamespace.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Window.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.ControlDarkBrushKey}" Color="#FF4D4D4D" /> <ControlTemplate x:Key="NoTitleBarChromeTemplate"> <Border Background="{StaticResource {x:Static SystemColors.ControlBrush}}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <DockPanel Grid.Row="0" Margin="2"> <!-- 这里可以添加你的标题文本,如果需要 --> <TextBlock Text="Custom Window" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center"/> </DockPanel> <ContentPresenter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> </Grid> </Border> </ControlTemplate> </Window.Resources> <Window.WindowStyle> <Setter Property="WindowChrome"> <Setter.Value> <WindowChrome UseShellResource="False" GlassFrameEnabled="False" Template="{StaticResource NoTitleBarChromeTemplate}"/> </Setter.Value> </Setter> </Window.WindowStyle> <Grid> <!-- Your window content here --> </Grid> </Window> ``` 2. **直接操作窗口样式**: 如果你想保持默认的模板,但隐藏这些按钮,可以使用`UIElement.Visibility`属性将其设为`Collapsed`: ```xml <Window ...> <Window.Style> <Style TargetType="Window"> <Setter Property="WindowChrome.WindowChrome"> <Setter.Value> <WindowChrome UseShellResource="True" /> </Setter.Value> </Setter> <Setter Property="Window.SizeToContent" Value="WidthAndHeight" /> <Style.Triggers> <Trigger Property="IsMaximized" Value="True"> <Setter Property="Window.RestoreBounds"> <Setter.Value> <Rectangle Width="200" Height="150" Fill="Transparent" /> </Setter.Value> </Setter> </Trigger> <Trigger Property="IsMinimized" Value="True"> <Setter Property="Window.IconicState" Value="NormalSize" /> </Trigger> </Style.Triggers> </Style> </Window.Style> <!-- 省略了其他的窗口内容 --> </Window> ``` 在这两个例子中,`IsMaximized` 和 `IsMinimized` 触发器分别控制最大化和最小化后的窗口外观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值