1.wpf自定义窗口:

WindowChrome类描述:https://msdn.microsoft.com/zh-cn/library/system.windows.shell.windowchrome.aspx

示例样式效果:

1.设置GlassFrameThickness=0 隐藏默认标题栏

  

2.最大化最小化不会盖住任务栏

不能设置WindowStyle="None",否则靠WindowState属性最大化时会出现窗体显示在任务栏背后,导致部分窗体被遮盖

3关于屏幕溢出问题

没google到很好的办法,目前是添加margin解决,就是最大化时添加8px margin,这个值是google到的帖子中代码中出现频率较高的值,也有人推荐这个值,但是无法兼容屏幕分辨率,可以大体根据屏幕分辨率设置不同的值.

然后,我尝试过将CaptionHeight=0,然后不依赖WindowState属性而是手动去设置Location, width ,height,

过程中遇到一个问题:CaptionHeight设置为0,但是Caption区域任然存在,但是和设置了CaptionHeight时有区别,这个区域(长、宽)不随窗体最大化而变化,也就是最大化了Caption的宽度不变,导致左边区域可以拖动窗体,右边区域无法拖动。

所以解决最大化、最小化、最大化时拖动标题栏变成Normal状态、拉动窗体四边框调整窗体大小、解决屏幕溢出、解决任务栏覆盖的问题最好的办法就是不用WindowChrome,但是又会遇到 AllowsTransparency="True"的问题

 <Border>
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<!-- fix window screen overflow,set margin 8px -->
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}"
Value="Maximized">
<Setter Property="Margin" Value="8px"/>
</DataTrigger>
<DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}"
Value="Normal">
<Setter Property="Margin" Value=""/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Border> window content ...... </Border>
</Border>
<Window x:Class="WindowChromeTest.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:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
xmlns:local="clr-namespace:WindowChromeTest"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="local:MainWindow">
<Setter Property="shell:WindowChrome.WindowChrome">
<Setter.Value>
<shell:WindowChrome
CaptionHeight="50"
GlassFrameThickness="0"
CornerRadius="0"
ResizeBorderThickness="2"
></shell:WindowChrome>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MainWindow}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="Orange">
<StackPanel Orientation="Horizontal">
<Button shell:WindowChrome.IsHitTestVisibleInChrome="True" Content="Test Button" Click="Button_Click"></Button>
</StackPanel>
</Border>
<Border Grid.Row="1" Background="White">
<ContentPresenter Content="{TemplateBinding Content}"></ContentPresenter>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<TextBlock Text="asdasdf"></TextBlock>
</Window>

  

05-06 05:56