首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当WindowStyle="None“AllowsTransparency=”False“和ResizeMode="CanResize”时如何删除边框

在Windows应用程序开发中,特别是使用WPF(Windows Presentation Foundation)时,控件的边框和窗口样式可以通过设置特定的属性来控制。当你设置WindowStyle="None"AllowsTransparency="False"时,窗口将没有标准的标题栏和边框。然而,即使在这种情况下,窗口仍然可能有一个可见的边框,这通常是为了处理窗口的移动和调整大小。

如果你想要完全移除这个边框,同时保持ResizeMode="CanResize",你可以采取以下步骤:

基础概念

  • WindowStyle: 控制窗口的外观,设置为None可以移除标题栏和边框。
  • AllowsTransparency: 控制窗口是否可以透明,设置为False表示窗口不透明。
  • ResizeMode: 控制窗口是否可以被用户调整大小。

解决方案

要完全移除边框,同时允许窗口调整大小,你可以通过自定义窗口的样式来实现。以下是一个示例代码,展示了如何在WPF中实现这一点:

代码语言:txt
复制
<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800"
        WindowStyle="None"
        AllowsTransparency="False"
        ResizeMode="CanResize"
        Background="Transparent">
    <Grid>
        <!-- Your content here -->
    </Grid>
</Window>

关键点解释

  • Background="Transparent": 设置窗口背景为透明,这有助于隐藏任何剩余的边框。
  • 自定义拖动和调整大小逻辑: 由于移除了标准边框,你需要添加自定义逻辑来处理窗口的拖动和调整大小。这通常涉及到处理鼠标事件。

示例代码:自定义拖动和调整大小

代码语言:txt
复制
public partial class MainWindow : Window
{
    private bool isResizing = false;
    private Point resizeStart;
    private double initialWidth, initialHeight;

    public MainWindow()
    {
        InitializeComponent();
        this.MouseDown += MainWindow_MouseDown;
        this.MouseMove += MainWindow_MouseMove;
        this.MouseUp += MainWindow_MouseUp;
    }

    private void MainWindow_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.ChangedButton == MouseButton.Left)
        {
            this.DragMove();
        }
        else if (e.ChangedButton == MouseButton.Right || e.ChangedButton == MouseButton.Middle)
        {
            isResizing = true;
            resizeStart = e.GetPosition(this);
            initialWidth = this.Width;
            initialHeight = this.Height;
        }
    }

    private void MainWindow_MouseMove(object sender, MouseEventArgs e)
    {
        if (isResizing)
        {
            double deltaX = e.GetPosition(this).X - resizeStart.X;
            double deltaY = e.GetPosition(this).Y - resizeStart.Y;
            this.Width = initialWidth + deltaX;
            this.Height = initialHeight + deltaY;
        }
    }

    private void MainWindow_MouseUp(object sender, MouseButtonEventArgs e)
    {
        isResizing = false;
    }
}

应用场景

这种方法适用于需要高度自定义窗口外观的应用程序,例如游戏、多媒体播放器或专业工具软件。

通过上述方法,你可以创建一个没有边框且可调整大小的窗口,同时保持良好的用户体验和功能完整性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用WindowChrome自定义Window Style

前言 做了WPF开发多年,一直未曾自己实现一个自定义Window Style,无论是《WPF编程宝典》或是各种博客都建议使用WindowStyle="None" 和 AllowsTransparency...最近来了兴致想自己实现一个,才知道WindowStyle="None" 的方式根本不好用,原因有几点: 如果Window没有阴影会很难看,但自己添加DropShadowEffect又十分影响性能。...光是性能问题就足以放弃WindowStyle="None" 的实现方式,幸好还有使用WindowChrome的实现方式,但一时之间也找不到理想的实现,连MSDN上的文档( WindowChrome Class...== ResizeMode.CanResize || ResizeMode == ResizeMode.CanResizeWithGrip; } private void CanMinimizeWindow...ResizeGrip是当ResizeMode = ResizeMode.CanResizeWithGrip;时出现的Window右下角的大小调整手柄,基本上用于提示窗口可以通过拖动边框改调整小。

2.3K20

WPF窗体透明控件不透明实例

目的:遮挡下面的窗体 WPF 窗口去除顶部边框(正宗无边框) 最近在做一个大屏展示视频图片的项目,功能并不复杂,半天的工作量吧,一开始同事采用的Unity3D进行开发,但是里面要播放4K视频,Unity...的短板就是视频的播放了,今晚就要交付了,我一早就来公司,决定用WPF重新开发一版,各项功能都好了,唯独顶部总是显示一条白色的边,已经设置WindowStyle为None了也没用,幸得网上大神提供的资料...="True" WindowStyle="None" ResizeMode="NoResize" WindowState="Maximized" Topmost="True" Background="Black...="True" WindowStyle="None"> WindowStyle="None" ResizeMode="NoResize" WindowState="Maximized" Topmost="True" > <Window.Resources

2.3K10
  • WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None"、AllowsTransparency="True" 这两个属性。...本文介绍如何使用 WindowChrome 而不设置 AllowsTransparency="True" 制作背景透明的异形窗口,这可以避免异形窗口导致的低渲染性能。...如何实现 要实现这种背景透明的异形窗口,需要为窗口设置以下三个属性: WindowStyle="None" ResizeMode="CanMinimize" 或 ResizeMode="NoResize...="True" 都是一个必不可少的步骤,另外也需要 WindowStyle="None"。...值得注意的是,由于在使用 WindowChrome 制作透明窗口的时候设置了 ResizeMode="None",所以你拖动窗口在屏幕顶部和左右两边的时候,Windows 不会再帮助你最大化窗口或者靠边停靠窗口

    1.7K20

    2020-5-22-如何使WPF在窗口外部区域可拖动缩放

    今天来和大家聊如何使WPF在窗口外部区域可拖动缩放。 ---- 问题来源 对于WPF窗口来说,默认的可拖动缩放区域较小。 在某些应用场景下我们期望能够设置一个较大的可拖动的缩放区域。...主要是通知辅助窗口调整位置和大小,确定包裹在主窗口周围 StateChanged和IsVisibleChanged用于通知窗口的显示隐藏,避免主窗口隐藏时,辅助窗口还能被拖动 Closed用于在主窗口关闭后...听着很复杂,实际做起来很简单,就是在辅助窗口被点击时,给主窗口发一个非客户区被点击的win消息。...WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True) - walterlv 关键代码如下 //设置窗口非客户区大小为0 ResizeMode...= ResizeMode.NoResize; WindowStyle = WindowStyle.None; WindowChrome.SetWindowChrome(this, new WindowChrome

    1.9K10

    【愚公系列】2023年09月 WPF控件专题 Window窗体属性和事件

    下面是一些常见属性的介绍: FormBorderStyle属性:指定窗体的边框样式。常见的边框样式有None、FixedSingle、Fixed3D、Sizable等。...以上是一些常用的窗体属性,还有很多其他的属性可以用于更细致的控制和定制。通过对这些属性的使用,可以创建出各种精美的窗体界面。 2.常用事件 Load事件:当窗体加载完成时触发。...LostFocus事件:当窗体失去焦点时触发。可以用来实现窗体失去焦点时的操作。 FormClosed事件:当窗体已经关闭时触发。可以用来进行资源释放等操作。...可以用来实现窗体失去激活状态时的操作。 FormBorderStyleChanged事件:当窗体边框样式改变时触发。可以用来实现边框样式改变时的操作。...Width和Height:窗体的大小。 WindowState:窗体的初始状态(最大化、最小化或正常)。 ResizeMode:窗体的调整大小模式(默认为CanResize)。

    50211

    XAML常用控件

    WindowStyle 设个属性用来设置窗体的风格,它有四个值:None,SingleBorderWindow,ThreeDBorderWindow,ToolWindow。...SingleBorderWindow是默认值,就是默认启动的样子,ThreeDBorderWindow是3D边框,在win10中已经和SingleBorderWindow样式一致了,None是无边框,启动时如下...width和height定义的大小,Minimized 启动时最小化,Maximized 启动时最大化。...一般情况下,我们要做一个好看的窗体,使用微软给我们定义好的样式是不够的,我们会将窗体样式设置为None,然后自己去定义标题栏,但是当设置为None时,顶部还有一条白色的框,如下: 为了去掉它...当窗体样式设为None时,因为标题栏被隐藏,我们无法移动窗体,为了使窗体可以移动,我们要为window中的布局控件添加MouseDown事件的事件处理器,并且要为其设置一个背景(window设置为允许透明

    1.1K20

    动手写一个简单的消息对话框

    因此,当需要一个与应用程序主题风格一致的消息对话框时,只能自己动手造轮子了。 确定“轮子”的功能 消息对话框的核心功能是向用户显示信息,并在用户对消息进行处理前中断用户的操作。...外部矩形是非工作区,其中包括标题栏按钮(最小化、最大化和关闭) 、窗口边框、调整大小和移动行为、应用程序图标和标题以及系统菜单。它由操作系统的窗口管理器绘制和管理。其尺寸由标准操作系统设置决定。...自定义窗口外观主要是针对非工作区,可以通过设置属性WindowStyle为None,或者使用 WindowChrome类来自定义。这里我们使用前一种方法。 上述代码中,通过把WindowStyle属性设置为None来隐藏默认的非工作区(控制区),然后再窗口的Template中定义一个两行的Grid,第一行模拟窗口非工作区的标题栏...这样做并非多此一举,而是为了方便局部需要个性化样式时最大限度地复用默认的全局样式。 自定义消息对话框模板 消息对话框整体可以划分为信息区域和交互区域两部分。

    40110

    WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)

    本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗口。 ---- 停靠窗口 你可能并不明白停靠窗口是什么意思。...当打开一个新的 OneNote 停靠窗口之后,这个新的 OneNote 窗口将固定显示在桌面的右侧,其他的窗口就算最大化也只会占据剩余的空间。...如何还原 Windows AppBar 的 API 有一个很不好的设定,如果进程退出了,那么 AppBar 所占用的空间 并不会还原!!!...不过不用担心,我在封装的代码里面加入了窗口关闭时还原空间的代码,如果你正常关闭窗口,那么停靠窗口占用的空间就会及时还原回来。...= WindowStyle.None; _window.ResizeMode = ResizeMode.NoResize; _window.Topmost

    99820

    WPF怎么做新手引导界面?

    ="None" AllowsTransparency="True" x:Name="gw" Background="#01FFFFFF" ShowInTaskbar="False"> ...Point point = fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0)); 当获取完坐标以后,则需要将控件给圈起来...,当然,真的是边框,所以,又不好设置Margin或者Padding,所以,最后的做法,就是,在外层又绘制了一个区域,只是这个区域不包含边框线而已,填充色相同 和高度进来...这是由于弹出的引导窗体获取了主窗体的大小,但是Point去获取控件坐标位置的时候,主窗体是不包含头部的,由于遮罩没有头部,所以定位出错了,这个我还没有找到好的解决办法,如果有大神知道如何解决的话,请赐教

    1.1K10

    WPF怎么做新手引导界面?

    ="None" AllowsTransparency="True" x:Name="gw" Background="#01FFFFFF" ShowInTaskbar="False"> ...Point point = fe.TransformToAncestor(Window.GetWindow(fe)).Transform(new Point(0, 0)); 当获取完坐标以后,则需要将控件给圈起来...,当然,真的是边框,所以,又不好设置Margin或者Padding,所以,最后的做法,就是,在外层又绘制了一个区域,只是这个区域不包含边框线而已,填充色相同 和高度进来...这是由于弹出的引导窗体获取了主窗体的大小,但是Point去获取控件坐标位置的时候,主窗体是不包含头部的,由于遮罩没有头部,所以定位出错了,这个我还没有找到好的解决办法,如果有大神知道如何解决的话,请赐教

    1.4K20

    WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWPChrome)

    clr-namespace:Walterlv.Whitman" mc:Ignorable="d" Title="Whitman" Width="800" Height="450" WindowStyle...="None" AllowsTransparency="True"> 然而,这就不贴近原生窗口体验了,有这么多事情都不好模拟: 最小化、最大化、关闭按钮 按钮要多大?...鼠标滑入划出的动画效果如何? 窗口标题栏交互 标题栏上有右键菜单,如果自己模拟,基本上这个就要自己重新实现了。...窗口的边框颜色 虽然窗口边框是被广为吐槽的一点,但为了保证一致的窗口体验,这也是需要模拟的;正常情况和失焦的情况颜色还不一样。...NonClientFrameEdges="Left,Bottom,Right" /> ▲ 比较接近的效果 这回我们终于看到了比较接近原生窗口的效果了,除了窗口的边框效果在激活和非激活状态下与原生窗口一致

    2.2K60

    【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去

    (仅当边框类型为线型时有效) /// [Description("获取或设置边框颜色(仅当边框类型为线型时有效)。")]...ShowDialog弹出时,在收到WM_SHOWWINDOW前,Owner会被Disable //故需在收到该消息后立即Enable它,不然Owner窗体和本窗体都将处于无响应状态...关于使用,先看一下FloatLayerBase的部分公开成员: 上面4个属性都是跟边框有关的,边框总共有3种形态,三维、线型、无,由BorderType指定;当为三维形态时,由Border3DStyle...指定具体样式;为线型时,由BorderSingleStyle和BorderColor分别指定具体线型和颜色。...在此也提醒一下调用者,在使用模式对话框时,永远考虑有返回Cancel这种情况,不限于本例,而是所有对话框 原Show()/Show(IWin32Window)和ShowDialog()/ShowDialog

    2.8K20
    领券