Skip to content

WindowX zh CN

末城via edited this page Jun 21, 2023 · 3 revisions

WindowX 窗体X

返回目录

适用于:   v1.1.12 或更新的版本

概述

类名:    WindowX 窗体X
命名空间:    Panuon.WPF.UI
位于:    SharedResources/Panuon.WPF.UI/Controls/WindowX.cs
继承自:    System.Windows.Window, System.ComponentModel.INotifyPropertyChanged

提供一系列属性和方法, 用于扩展 Window 控件的功能。
有关为窗体自定义标题栏的更多内容, 请参考 WindowXCaption 标题栏辅助类。
有关为窗体提供模态按钮的更多内容,请参考 WindowXModalDialog 模态对话框辅助类。

滚动至示例


备注

属性间的相互作用

IsEnabled 属性的值设为 False 时, Opacity 的属性值将与 GlobalSettings.Setting.DisabledOpacity 属性的值绑定(它的默认值为 0.4)。有关全局设置的更多内容, 请参考 GlobalSettings 辅助类。
IsMaskVisible 属性的值设为 True 时, DisableDragMove 的属性值将被置为 True
IsFullScreen 属性的值设为 True 时, WindowStyle 的属性值将被置为 None

自定义样式提示

InteropOwnersMask 属性的默认值为 True , 父窗体的遮罩层将随当前窗体的打开或关闭同步发生变化。
WindowX 窗体X 默认不支持圆角, 但你仍然可以通过修改 WindowChrome.WindowChrome 属性来定义窗体圆角(但这将使你的窗体失去阴影,或失去拖拽调整窗体大小的功能。在Net40中修改 WindowChrome.WindowChrome , 你还需要引用 xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell" 命名空间)。要查看设置圆角后的效果,参见示例4
在使用 WindowX 窗体X 时,你的页面后端 .xaml.cs 中的窗体继承基类也要从 Window 更改为 Panuon.WPF.UI.WindowX。否则将引发编译失败。


依赖属性

IsEscEnabled

类型:    System.Boolean
默认值:    False
获取或设置是否允许用户按下Esc键来关闭窗体。

IsFullScreen

类型:    System.Boolean
默认值:    False
获取或设置是否进入全屏模式。

IsF11Enabled

类型:    System.Boolean
默认值:    False
获取或设置是否允许用户按下F11键来切换全屏模式。

CanClose

类型:    System.Boolean
默认值:    True
获取或设置是否允许当前窗体被用户关闭(包括强制关闭)。调用 Close() 仍然可以正常关闭窗体。

DisableDragMove

类型:    System.Boolean
默认值:    False
获取或设置是否允许当前窗体被拖拽更改位置。

IsMaskVisible

类型:    System.Boolean
默认值:    False
获取或设置是否显示窗体遮罩。

MaskBrush

类型:    System.Media.Brush
默认值:    #B3FFFFFF
获取或设置窗体遮罩的色彩画刷。

Overlayer

类型:    System.Object
默认值:    {Null}
获取或设置覆盖层的内容。覆盖层位于窗体遮罩之上。

IsOverlayerVisible

类型:    System.Boolean
默认值:    False
获取或设置是否显示覆盖层。

Backstage

类型:    System.Object
默认值:    {Null}
获取或设置幕布层的内容。幕布层位于窗体内容与窗体遮罩之间。

IsOverlayerVisible

类型:    System.Boolean
默认值:    False
获取或设置是否显示幕布层。

InteropOwnersMask

类型:    System.Boolean
默认值:    True
获取或设置是否自动与 Owner 窗体的遮罩层进行交互。若父窗体为 WindowX 窗体X 类型:窗体打开时自动打开父窗体的窗体遮罩;窗体关闭时, 若父窗体没有其他的子窗体, 则自动关闭父窗体的窗体遮罩。

Effect

类型:    Panuon.WPF.UI.WindowXEffect
默认值:    Null
获取或设置窗体X的特效(可用的特效仅对WindowX控件生效,不支持其他控件)。较早的Windows版本可能不支持使用特效。
该属性自v2.2.12-alpha以上可用。

Aero 玻璃特效

<pu:WindowX.Effect>
    <pu:AeroWindowXEffect Background="#66FFFFFF" />
</pu:WindowX.Effect>

Acrylic 亚克力特效

请注意,由于系统原因,在Windows 10 1903以上的版本中,启用此特效并拖拽、缩放窗体会造成显著延迟与卡顿。

<pu:WindowX.Effect>
    <pu:AcrylicWindowXEffect AccentColor="#66FFFFFF" />
</pu:WindowX.Effect>


附加属性

IsDragMoveArea

类型:    System.Boolean
默认值:    False
获取或设置是否将该控件标记为窗体拖拽区域的一部分。请注意, 如果没有为控件指定非 Null 的背景色, 拖拽可能不会生效。


方法

Minimize()

最小化当前窗体。

Maximize()

最大化当前窗体。

Normalmize()

正常化窗体大小。

MaximizeOrRestore()

最大化窗体(如果窗体状态为正常化)或正常化窗体(如果窗体状态为最大化)。

MinimizeOrRestore()

最小化窗体(如果窗体状态为正常化)或正常化窗体(如果窗体状态为最小化)。

NotifyOfPropertyChange([CallerMemberName] string propertyName = null)

通知属性发生了变化。仅在 DataContext = this 时可用。

NotifyOfPropertyChange(Expression<Func> property)

通知属性发生了变化。仅在 DataContext = this 时可用。

Set(ref T identifer, T value, [CallerMemberName] string propertyName = null)

设置字段对应的属性值, 并通知属性发生了变化。仅在 DataContext = this 时可用。


命令

MinimizeCommand

最小化当前窗体。

MaximizeCommand

最大化当前窗体。

CloseCommand

关闭窗体。


示例

示例1

<pu:WindowX x:Class="WpfApplication.FooView"
            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:WpfApplication"
            xmlns:pu="https://opensource.panuon.com/wpf-ui"
            mc:Ignorable="d"
            Title="FooView"
            Height="250"
            Width="400"
            BorderThickness="1">
    <Window.BorderBrush>
        <LinearGradientBrush StartPoint="0,0"
                             EndPoint="0,1">
            <GradientStop Offset="0"
                          Color="#6CBCEA" />
            <GradientStop Offset="1"
                          Color="#005869" />
        </LinearGradientBrush>
    </Window.BorderBrush>
</pu:WindowX>

示例2

<pu:WindowX x:Class="WpfApplication.FooView"
            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:WpfApplication"
            xmlns:pu="https://opensource.panuon.com/wpf-ui"
            mc:Ignorable="d"
            Title="FooView"
            Height="350"
            Width="500"
            pu:WindowXCaption.Height="40"
            pu:WindowXCaption.Buttons="Close">
    <pu:WindowXCaption.HeaderTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Margin="10,0,0,0"
                       Source="/Samples;component/Resources/Logo.png"
                       RenderOptions.BitmapScalingMode="HighQuality"
                       Height="25" />
            </StackPanel>
        </DataTemplate>
    </pu:WindowXCaption.HeaderTemplate>
    <pu:WindowXCaption.ExtendControl>
        <StackPanel Orientation="Horizontal">
            <Button Width="40"
                    Height="35"
                    FontSize="18"
                    Background="Transparent"
                    pu:ButtonHelper.HoverBackground="#CCCCCC"
                    pu:ButtonHelper.HoverForeground="#FFFFFF"
                    VerticalAlignment="Top"
                    FontFamily="{StaticResource PanuonIconFont}"
                    Content="&#xe98f;" />
            <pu:DropDown Width="40"
                         Height="35"
                         VerticalAlignment="Top"
                         pu:ShadowHelper.BlurRadius="10"
                         pu:ShadowHelper.ShadowDepth="3"
                         pu:DropDownHelper.Placement="BottomLeft"
                         pu:DropDownHelper.CornerRadius="5,1,5,5"
                         pu:DropDownHelper.ClipDockSideShadow="False"
                         StaysOpen="False">
                <pu:DropDown.Content>
                    <ToggleButton Background="Transparent"
                                  pu:ToggleButtonHelper.HoverBackground="#CCCCCC"
                                  pu:ToggleButtonHelper.HoverForeground="#FFFFFF"
                                  pu:ToggleButtonHelper.CheckedBackground="#CCCCCC"
                                  pu:ToggleButtonHelper.CheckedForeground="#FFFFFF"
                                  IsChecked="{Binding IsOpen, RelativeSource={RelativeSource AncestorType=pu:DropDown}}"
                                  Content="&#xe939;"
                                  FontSize="18"
                                  FontFamily="{StaticResource PanuonIconFont}" />
                </pu:DropDown.Content>
                <StackPanel Height="150"
                            Width="120">
                    
                </StackPanel>
            </pu:DropDown>
        </StackPanel>
    </pu:WindowXCaption.ExtendControl>
    <Grid>
    </Grid>
</pu:WindowX>

示例3

<pu:WindowX x:Class="WpfApplication.FooView"
            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:WpfApplication"
            xmlns:pu="https://opensource.panuon.com/wpf-ui"
            mc:Ignorable="d"
            Title="FooView"
            Height="350"
            Width="500"
            Background="#1E1E1E"
            Foreground="#FFFFFF"
            BorderBrush="#2E2E2E"
            BorderThickness="1"
            pu:WindowXCaption.BorderBrush="#3E3E3E"
            pu:WindowXCaption.BorderThickness="0,0,0,1"
            pu:WindowXCaption.HeaderAlignment="Center"
            pu:WindowXCaption.Background="#2A2A2A"
            pu:WindowXCaption.ShadowColor="#7E8E8E"
            pu:ShadowHelper.BlurRadius="15"
            pu:ShadowHelper.ShadowDepth="2">
    <pu:WindowXCaption.HeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType=pu:WindowX}}" 
                       VerticalAlignment="Center"
                       HorizontalAlignment="Center"/>
        </DataTemplate>
    </pu:WindowXCaption.HeaderTemplate>
    <pu:WindowXCaption.MinimizeButtonStyle>
        <Style TargetType="Button"
               BasedOn="{StaticResource {x:Static pu:WindowXCaption.MinimizeButtonStyleKey}}">
            <Setter Property="FontSize"
                    Value="14" />
            <Setter Property="pu:ButtonHelper.HoverBackground"
                    Value="{x:Null}" />
            <Setter Property="pu:ButtonHelper.HoverForeground"
                    Value="#AAAAAA" />
        </Style>
    </pu:WindowXCaption.MinimizeButtonStyle>
    <pu:WindowXCaption.MaximizeButtonStyle>
        <Style TargetType="Button"
               BasedOn="{StaticResource {x:Static pu:WindowXCaption.MaximizeButtonStyleKey}}">
            <Setter Property="FontSize"
                    Value="14" />
            <Setter Property="pu:ButtonHelper.HoverBackground"
                    Value="{x:Null}" />
            <Setter Property="pu:ButtonHelper.HoverForeground"
                    Value="#AAAAAA" />
        </Style>
    </pu:WindowXCaption.MaximizeButtonStyle>
    <pu:WindowXCaption.CloseButtonStyle>
        <Style TargetType="Button"
               BasedOn="{StaticResource {x:Static pu:WindowXCaption.CloseButtonStyleKey}}">
            <Setter Property="FontSize"
                    Value="14" />
            <Setter Property="pu:ButtonHelper.HoverBackground"
                    Value="{x:Null}" />
            <Setter Property="pu:ButtonHelper.HoverForeground"
                    Value="#FF4C4C" />
        </Style>
    </pu:WindowXCaption.CloseButtonStyle>
    <Grid>

    </Grid>
</pu:WindowX>

示例4

<pu:WindowX x:Class="WpfApplication.FooView"
            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:pu="https://opensource.panuon.com/wpf-ui"
            xmlns:local="clr-namespace:WpfApplication"
            mc:Ignorable="d"
            Title="FooView"
            Height="250"
            Width="400">
    <WindowChrome.WindowChrome>
        <WindowChrome ResizeBorderThickness="5"
                      GlassFrameThickness="0"
                      CornerRadius="25"/>
    </WindowChrome.WindowChrome>
    <Grid>

    </Grid>
</pu:WindowX>