WPF WindowChrome

一、标准Window

二、WindowChrome的基本概念

若要自定义窗口,同时保留其标准功能,可以使用WindowChrome类。 WindowChrome类窗口框架的功能分离开来视觉对象,并允许您控制的客户端和应用程序窗口的非工作区之间的边界。

<WindowChrome.WindowChrome>
    <WindowChrome />
</WindowChrome.WindowChrome>

UseAeroCaptionButtons:表示标题栏上的那三个默认按钮是否可以命中,因为我们想要自己管理这三个按钮的样式、显示或隐藏,所以设置为False  

GlassFrameThickness:用于控制边框

ResizeBorderThickness:用户可以单击并拖动以调整窗口大小的区域的宽度,设置之后则三个按钮隐藏。

CaptionHeight:指定WindowChrome的标题栏高度

IsHitTestVisibleInChrome:如果需要在标题栏放自己的按钮(或其它交互元素)需要将这个按钮的WindowsChrome.IsHitTestVisibleInChrome附加属性设置为True

示例一:

 

XAML代码:

<WindowChrome.WindowChrome>
    <WindowChrome CornerRadius="0"
                    CaptionHeight="0"
                    GlassFrameThickness="1"
                    UseAeroCaptionButtons="False"
                    NonClientFrameEdges="None" />
</WindowChrome.WindowChrome>
<Grid>
    <Border Height="30" Background="Red" VerticalAlignment="Top"></Border>
</Grid>

  

参考:
WindowChrome自定义Window Style:https://www.cnblogs.com/dino623/p/custom_window_style_using_WindowChrome.html

使用WindowChrome自定义Window Style:https://www.cnblogs.com/dino623/p/CustomWindowStyle.html

WPF中自定义标题栏时窗体最大化处理之WindowChrome:https://www.cnblogs.com/huaxia283611/p/wpf-maximize-windowchrome.html

WPF 窗口大小自适应:https://blog.csdn.net/weixin_34268843/article/details/89581243

WPF 设置属性使窗口不可改变大小:https://blog.csdn.net/qq_39704682/article/details/95475855

 WPF的MainWindow设置背景透明仍然显示黑色Black问题

<Window ...
        AllowsTransparency="True"
        Foreground="{x:Null}"
        Background="{x:Null}"
        FocusVisualStyle="{x:Null}">

注意要设置AllowsTransparency=true,允许透明色,否则就是黑色

   

window 拖动

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    base.OnMouseLeftButtonDown(e);
    if (e.ButtonState == MouseButtonState.Pressed)
        DragMove();
}

  

窗口失去焦点

protected override void OnDeactivated(EventArgs e)
{
    base.OnDeactivated(e);
    this.Close();
}

  

设置窗口内容自适应

<Window SizeToContent="WidthAndHeight"

 

判断项目中的某个窗体是否已经打开或者已经存在

foreach (Window item in Application.Current.Windows)
{
     if (item is window1) return;
}

  

posted @ 2021-05-28 15:41  microsoft-zhcn  阅读(620)  评论(0编辑  收藏  举报