WPF如何封装一个可扩展的Window

  • WPF如何封装一个可扩展的Window已关闭评论
  • 34 次浏览
  • A+
所属分类:.NET技术
摘要

前言     WPF中Window相信大家都很熟悉,有时我们有一些自定义需求默认Window是无法满足的,比如在标题栏上放一些自己东西,这个时候我们就需要写一个自己的Window,实现起来也很简单,只要给Window设置一个WindowChrome.WindowChrome附加属性就可以实现,WindowChrome 可以让你自定义窗口的非工作区的外观和行为。非工作区就是窗口的标题栏和边框,通常由操作系统绘制和管理。WindowChrome 可以让你将 WPF 的内容扩展到非工作区,同时保留一些系统的功能和行为,比如调整大小,移动,最大化,最小化等。

前言

    WPF中Window相信大家都很熟悉,有时我们有一些自定义需求默认Window是无法满足的,比如在标题栏上放一些自己东西,这个时候我们就需要写一个自己的Window,实现起来也很简单,只要给Window设置一个WindowChrome.WindowChrome附加属性就可以实现,WindowChrome 可以让你自定义窗口的非工作区的外观和行为。非工作区就是窗口的标题栏和边框,通常由操作系统绘制和管理。WindowChrome 可以让你将 WPF 的内容扩展到非工作区,同时保留一些系统的功能和行为,比如调整大小,移动,最大化,最小化等。

一、示例代码

1.1 基本使用

<local:CustomWindow     x:Class="CustomWindowDemo.Window1"     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:local="clr-namespace:CustomWindowDemo"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     Title="Window1"     Width="800"     Height="450"     Icon="/logo.png"     mc:Ignorable="d">     <Grid /> </local:CustomWindow>

WPF如何封装一个可扩展的Window

 1.2 自定义标题栏高度

<local:CustomWindow     x:Class="CustomWindowDemo.Window1"     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:local="clr-namespace:CustomWindowDemo"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     Title="Window1"     Width="800"     Height="450"     CaptionHeight="35"     Icon="/logo.png"     mc:Ignorable="d">     <Grid /> </local:CustomWindow>

WPF如何封装一个可扩展的Window

1.3 自定义标题栏颜色

 

<local:CustomWindow     x:Class="CustomWindowDemo.Window1"     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:local="clr-namespace:CustomWindowDemo"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     Title="Window1"     Width="800"     Height="450"     CaptionBackground="Blue"     Icon="/logo.png"     mc:Ignorable="d">     <Grid /> </local:CustomWindow>

WPF如何封装一个可扩展的Window

1.4 自定义标题栏内容

<local:CustomWindow     x:Class="CustomWindowDemo.Window1"     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:local="clr-namespace:CustomWindowDemo"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     Title="Window1"     Width="800"     Height="450"     Icon="/logo.png"     mc:Ignorable="d">     <local:CustomWindow.CaptionBarContent>         <Grid>             <Grid.ColumnDefinitions>                 <ColumnDefinition Width="Auto" />                 <ColumnDefinition Width="*" />                 <ColumnDefinition Width="Auto" />             </Grid.ColumnDefinitions>              <Button                 Margin="5"                 Padding="2"                 VerticalAlignment="Center"                 Background="Transparent"                 BorderThickness="0"                 WindowChrome.IsHitTestVisibleInChrome="True">                 <StackPanel Orientation="Horizontal">                     <Polygon                         VerticalAlignment="Center"                         Fill="White"                         Points="0,6 6,0 6,12" />                     <TextBlock                         Margin="4,0,0,0"                         VerticalAlignment="Center"                         FontSize="14"                         Foreground="White"                         Text="返回" />                 </StackPanel>             </Button>             <TextBlock                 Grid.Column="1"                 HorizontalAlignment="Center"                 VerticalAlignment="Center"                 FontSize="14"                 Foreground="White"                 Text="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Title}" />             <Button                 Grid.Column="2"                 Margin="5"                 Padding="2"                 VerticalAlignment="Center"                 Background="Transparent"                 BorderThickness="0"                 FontSize="14"                 Foreground="White"                 WindowChrome.IsHitTestVisibleInChrome="True">                 <StackPanel Orientation="Horizontal">                     <TextBlock                         Margin="0,0,4,0"                         VerticalAlignment="Center"                         Text="Admin" />                     <Polyline                         VerticalAlignment="Center"                         Points="0,0 5,5 10,0"                         Stroke="White"                         StrokeThickness="2" />                 </StackPanel>             </Button>         </Grid>     </local:CustomWindow.CaptionBarContent>     <Grid /> </local:CustomWindow>

WPF如何封装一个可扩展的Window

 二、综合案例

 

WPF如何封装一个可扩展的Window

如需以上代码,请到群共享文件中下载

 

技术交流群
WPF如何封装一个可扩展的Window
 
联系方式
WPF如何封装一个可扩展的Window