ToB企服应用市场:ToB评测及商务社交产业平台

标题: WPF自定义标题栏 [打印本页]

作者: 万万哇    时间: 2022-9-16 17:18
标题: WPF自定义标题栏
往往原有的标题栏无法满足需求,此时就需要进行自定义标题栏。
重新定义Window的Template

首先,需修改WindowChrome的几个属性
CaptionHeight属性值就是自定义标题栏的高,若值低于自定义窗体模板中的标题部分的高,可能或导致,鼠标点击标题栏无法拖动,因为鼠标此时可能不在CaptionHeight范围之内,所以导致无法拖动。
要使没有玻璃框架的自定义窗口,需将 GlassFrameThickness 属性设置为统一值 0
  1.     <WindowChrome.WindowChrome>
  2.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  3.     </WindowChrome.WindowChrome>
复制代码
自定义窗体模板,此时需要用到占位符ContentPresenter来替窗体工作区的内容进行占位,在非工作区中启用交互式元素需 WindowChrome.IsHitTestVisibleInChrome="True"
  1.     <WindowChrome.WindowChrome>
  2.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  3.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  4.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  5.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  6.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  7.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  8.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  9.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  10.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  11.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  12.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  13.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  14.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  15.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  16.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  17.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  18.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  19.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  20.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  21.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  22.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  23.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  24.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  25.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  26.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  27.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  28.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  29.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  30.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  31.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  32.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  33.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  34.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  35.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  36.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  37.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  38.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  39.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  40.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  41.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  42.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  43.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  44.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  45.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  46.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  47.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  48.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  49.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  50.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  51.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  52.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  53.     </WindowChrome.WindowChrome>    <WindowChrome.WindowChrome>
  54.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  55.     </WindowChrome.WindowChrome>
复制代码
View CodeViewModel代码:
  1.         #region 窗口最小化        ///         /// 窗口最小化        ///         private void MinWindow(Window window)        {            window.WindowState = WindowState.Minimized;        }        #endregion        #region 窗口最大化与还原        ///         /// 窗口最大化与还原        ///         private void MaxWindow(Window window)        {            window.WindowState = window.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;        }        #endregion        #region 窗口关闭        ///         /// 窗口关闭        ///    <WindowChrome.WindowChrome>
  2.         <WindowChrome CaptionHeight="100" GlassFrameThickness="0" />
  3.     </WindowChrome.WindowChrome> private void CloseWindow(Window window)        {            window.Close();        }        #endregion   
复制代码
View Code注意:最大化时存在边界溢出
处理方法:在xaml中编写触发器,当前窗口状态为 WindowState="Maximized" 时,给容器增加margin,margin左右的值为 (SystemParameters.MaximizedPrimaryScreenWidth - SystemParameters.WorkArea.Width)/ 2 ,上下也是同理。
如有更好的方法,希望留下建议。
效果图:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4