欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF 使用WindowChrome自定义窗体样式

程序员文章站 2022-07-13 23:29:50
...

WPF 使用WindowChrome自定义窗体样式

示例代码:

<Window x:Class="WpfApp4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp4"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"
        FontWeight="ExtraLight" ResizeMode="CanResize" WindowStartupLocation="CenterScreen"
        WindowStyle="None" AllowsTransparency="True" Background="{x:Null}">
    <Window.Resources>
        <Style x:Key="btn_nap" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"></ContentPresenter>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="FontSize" Value="18"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="Background" Value="Transparent"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Opacity" Value="0.7"/>
                </Trigger>
                <!--<Trigger Property="IsMouseOver" Value="False">
                    <Setter Property="Background" Value="#EEF0F5"/>
                </Trigger>-->
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="35" x:Name="windowChrome" CornerRadius="0" GlassFrameThickness="0"/>
    </WindowChrome.WindowChrome>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="35"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid Background="#3C6AB1">
            <TextBlock x:Name="lblTitle" Text="测试" Foreground="White" FontSize="14" Margin="10 0 0 0" VerticalAlignment="Center"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button WindowChrome.IsHitTestVisibleInChrome="True" Name="button_MiniSize" Content="─" Style="{StaticResource btn_nap}" HorizontalAlignment="Right" Foreground="White" Margin="0 0 5 0" Height="30" Width="30"/>
                <Button WindowChrome.IsHitTestVisibleInChrome="True" Name="button_MaxSize" Content="☐" Style="{StaticResource btn_nap}" HorizontalAlignment="Right" Foreground="White" Margin="0 0 5 0" Height="30" Width="30"/>
                <Button WindowChrome.IsHitTestVisibleInChrome="True" x:Name="btn_Close" Content="✕" Style="{StaticResource btn_nap}" HorizontalAlignment="Right" Foreground="White" Margin="0 0 5 0" Height="30" Width="30"/>
            </StackPanel>
        </Grid>
        <Grid Grid.Row="1" Background="LightBlue">
            
        </Grid>
    </Grid>
</Window>

效果:
WPF 使用WindowChrome自定义窗体样式
介绍:
WindowChrome
若要在保留其标准功能的同时自定义窗口,可以使用 WindowChrome 类。 WindowChrome类将窗口框架的功能与视觉对象隔开,并使你能够控制应用程序窗口的客户端和非工作区之间的边界。 WindowChrome通过使用类,您可以通过扩展工作区以覆盖非工作区来将 WPF 内容置于窗口框架中。 同时,它将通过两个不可见区域保留系统行为; 调整边框 和 标题 区的大小。
使用类创建自定义窗口分为两个主要部分 WindowChrome 。 首先,通过设置对象上公开的属性来自定义窗口的非客户端部分 WindowChrome 。 然后,为窗口提供一个模板,该模板定义扩展到非工作区的应用程序部分。 对象上公开的属性 WindowChrome 为 ResizeBorderThickness 、、 CaptionHeight CornerRadius 和 GlassFrameThickness 。
ResizeBorderThickness属性指定应用程序窗口外的不可见边框,用户可以单击并拖动它来调整窗口的大小。
CaptionHeight属性在窗口顶部指定一个不可见的区域,该区域启用通常与标题栏关联的系统行为。 这些行为包括:单击并拖动以移动窗口,双击以最大化窗口,并右键单击以显示 “系统” 菜单。
调整边框和标题区的大小不包含任何可视元素;它们仅定义响应输入和启用标准系统提供的窗口行为的区域。
CornerRadius属性指定窗口的角的舍入量。 如果为窗口启用了玻璃框架,则此属性不起作用。
GlassFrameThickness属性指定窗口周围的玻璃帧的宽度。 默认情况下,它使用属性指定的系统值 WindowNonClientFrameThickness 来模拟标准窗口的外观。 使用玻璃帧时,“最小化”、“最大化” 和 “关闭” 的标题按钮是可见的,并且是交互式的。 应用程序负责显示应用程序图标和标题文本。 可以设置 GlassFrameThickness 属性,使玻璃框架更宽或更小。

介绍参考:https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.shell.windowchrome?view=netframework-4.7.2

相关标签: WPF