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

使用WindowChrome自定义Window Style

前言 做了WPF开发多年,一直未曾自己实现一个自定义Window Style,无论是《WPF编程宝典》或是各种博客都建议使用WindowStyle="None" 和 AllowsTransparency...最近来了兴致想自己实现一个,才知道WindowStyle="None" 的方式根本不好用,原因有几点: 如果Window没有阴影会很难看,但自己添加DropShadowEffect又十分影响性能。...光是性能问题就足以放弃WindowStyle="None" 的实现方式,幸好还有使用WindowChrome的实现方式,但一时之间也找不到理想的实现,连MSDN上的文档( WindowChrome Class...注意当WindowState=Maximized时要将LayoutRoot的Margin设置成7,如果不这样做在最大化时Window边缘部分会被遮蔽,很多使用WindowChrome自定义Window的方案都没有处理这点...3.9 SizeToContent问题 有个比较麻烦的问题,当设置SizeToContent="WidthAndHeight",打开Window会出现以下错误。 ?

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入浅出话资源

    1.1       WPF对象资源的定义和查找 每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary。...在保存资源时,ResourceDictionary视资源对象为Object类型,所以再使用资源时先要对资源对象进行类型转换,XAML编译器能够根据Attribute自动识别资源类型,如果类型不对就会抛出异常...为了不把资源词典里的资源和应用程序里面内嵌的资源搞混,我们明确称呼资源词典里面的资源为“WPF资源”或“对象资源”,称呼应用程序内嵌资源为“程序集资源”或者“二进制资源”。...Do Not Copy;如果不希望以资源的形式使用外部文件,可以把Build Action属性设置为None,而把Copy to Output Directory设置为Copy Always。...使用完整写法时是绝对路径,C#代码中的UriKind必须为Absolute并且代表根目录的/不能省略。 使用相对路径可以借助类似DOS的语法进行导航,比如./代表同级目录,../代表父级目录。

    1.8K20

    如何在保留原本所有样式绑定和用户设置值的情况下,设置和还原 WPF 依赖项属性的值

    场景和问题 现在,我们假想一个场景(为了编代码方便): 有一个窗口,设置了一些样式属性 现在需要将这个窗口设置为全屏,这要求修改一些原来的属性(WPF 自带那设置有 bug,我会另写一篇博客说明) 取消设置窗口全屏后...= WindowStyle.None; } private void OnExitFullScreen() { _window.WindowStyle = _oldStyle; } 然而:...SetCurrentValue 设计为在不改变依赖项属性任何已有值的情况下,设置属性当前的值。...1 _window.SetCurrentValue(Window.WindowStyleProperty, WindowStyle.None); 那么,只需要还原 SetCurrentValue 所做的修改...window; private void OnEnterFullScreen() { _window.SetCurrentValue(Window.WindowStyleProperty, WindowStyle.None

    20020

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

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None"、AllowsTransparency="True" 这两个属性。...本文介绍如何使用 WindowChrome 而不设置 AllowsTransparency="True" 制作背景透明的异形窗口,这可以避免异形窗口导致的低渲染性能。...如何实现 要实现这种背景透明的异形窗口,需要为窗口设置以下三个属性: WindowStyle="None" ResizeMode="CanMinimize" 或 ResizeMode="NoResize...="None"。...WindowChrome AllowsTransparency 点击穿透 在完全透明的部分点击依然点在自己的窗口上 在完全透明的部分点击会穿透到下面的其他窗口 然而,如果你希望在使用高性能的 WindowChrome 时也依然能点击穿透

    1.7K20

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

    今天来和大家聊如何使WPF在窗口外部区域可拖动缩放。 ---- 问题来源 对于WPF窗口来说,默认的可拖动缩放区域较小。 在某些应用场景下我们期望能够设置一个较大的可拖动的缩放区域。...要想这5个窗口能像一个窗口一样工作,必须要让周围的辅助窗口跟随主窗口的状态变化。...听着很复杂,实际做起来很简单,就是在辅助窗口被点击时,给主窗口发一个非客户区被点击的win消息。...WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True) - walterlv 关键代码如下 //设置窗口非客户区大小为0 ResizeMode...= ResizeMode.NoResize; WindowStyle = WindowStyle.None; WindowChrome.SetWindowChrome(this, new WindowChrome

    1.9K10

    System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”

    当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:“System.InvalidOperationException:“寄宿 HWND 必须是子窗口。””。...Dispose(); } } } 寄宿 HWND 必须是子窗口 当运行此代码的时候,会提示错误: System.InvalidOperationException:“寄宿 HWND...= WS_CHILD, ++ }; 最关键的是两点: 需要设置此窗口为子窗口,也就是设置 WindowStyle 为 WS_CHILD; 需要设置此窗口的父窗口,也就是设置 ParentWindow...为 hwndParent.Handle(我们使用参数中传入的 hwndParent 作为父窗口)。...现在再运行,即可正常显示此嵌套窗口: 另外,WindowStyle 属性最好加上 WS_CLIPCHILDREN,详情请阅读: 解决 WPF 嵌套的子窗口在改变窗口大小的时候闪烁的问题 ---- 参考资料

    38320

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

    当打开一个新的 OneNote 停靠窗口之后,这个新的 OneNote 窗口将固定显示在桌面的右侧,其他的窗口就算最大化也只会占据剩余的空间。...虽然说要让一个窗口变成 AppBar 只需要一点点代码,但是要让整个停靠窗口工作得真的像一个停靠窗口,依然需要大量的辅助代码。...所以我将其封装成了一个 DesktopAppBar 类,方便 WPF 程序来调用。...不过不用担心,我在封装的代码里面加入了窗口关闭时还原空间的代码,如果你正常关闭窗口,那么停靠窗口占用的空间就会及时还原回来。...= WindowStyle.None; _window.ResizeMode = ResizeMode.NoResize; _window.Topmost

    1K20

    XAML常用控件

    WindowStyle 设个属性用来设置窗体的风格,它有四个值:None,SingleBorderWindow,ThreeDBorderWindow,ToolWindow。...一般情况下,我们要做一个好看的窗体,使用微软给我们定义好的样式是不够的,我们会将窗体样式设置为None,然后自己去定义标题栏,但是当设置为None时,顶部还有一条白色的框,如下: 为了去掉它...当窗体样式设为None时,因为标题栏被隐藏,我们无法移动窗体,为了使窗体可以移动,我们要为window中的布局控件添加MouseDown事件的事件处理器,并且要为其设置一个背景(window设置为允许透明...,当grid没有背景时是无法触发MouseDown事件的),然后在后台添加如下的代码: private void Grid_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs...VS是支持对WPF进行热重载的,当我们改变xaml代码,运行界面也会一并修改,但如果是引入一些新资源代码等无法实现热重载的情况,必须要重新启动程序。

    1.1K20

    WPF:自动执行机器人程序若干注意事项

    通常部署上线后,都是放在服务器上一直开着,不允许轻易被关闭,而且最好要有一个界面,随时可以手动方便控制状态或查看运行情况,一旦发生异常情况,能及时通知管理员(Email或短信之类) 如果是采用WPF技术开发...winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" WindowStyle...="None" ...> 将主窗体的WindowStyle设置成None即可 2、无边框窗体的移动 去掉顶上的边框后,通常为了美观,我们需要自己在顶上放一个伪造的标题栏,类似下面这样 <Border...; notifyIcon.Text = Properties.Resources.AppTitle;//指定托盘提示文字为资源中的AppTitle字符串 notifyIcon.Icon = Properties.Resources.App...;//指定托盘图标为资源中的"App"图标 notifyIcon.Visible = false; notifyIcon.MouseClick += notifyIcon_MouseClick; //

    1.3K80
    领券