首先需要明白一点,WPF窗体不同于Winform窗体,Winform继承很简单,基于一个base窗体直接继承即可,而WPF你可以把它看作是双继承关系,基于前台界面配套的模板(资源字典)xaml和后台cs控制继承的双向继承,即可达到继承目的,子窗体的引用当然也需要前台标签的引用和后台cs文件的继承。
扩展
去掉自带边框后需要自己重新绘制边框和定义相关事件,一些细微的细节可以通过浏览器显示出来,例如:单击浏览器上边栏按住鼠标左键进行拖动,会有一个缩小窗口和移动效果,隐藏的部分其实还有鼠标定位问题(需要计算最大化时鼠标光标位置在等比给缩小窗口确定光标位置),点击最大化时最大化图标的变化,设置圆角边框等等。。。
1.创建资源字典BaseWindowStyle.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFMain.Base">
<ControlTemplate x:Key="BaseWindowControlTemplate" TargetType="{x:Type Window}">
<Grid>
<Border Background="Transparent">
<Border CornerRadius="20" Background="White" BorderBrush="Black" BorderThickness="2,0,2,2">
<Grid>
<!--头部-->
<Border x:Name="MenuGrid" CornerRadius="15 15 0 0" Background="Black" Height="31" VerticalAlignment="Top">
<Grid>
<Label x:Name="Demo" Content="Demo" Foreground="White" HorizontalAlignment="Left" Margin="20,2,0,0" VerticalAlignment="Top" FontSize="16"/>
<Button Height="23" x:Name="btnMin" Background="Black" Margin="0,5,54,0" VerticalAlignment="Top" BorderThickness="0" HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<Image Stretch="Fill" Source="Resources/Minimize-2.png" Height="15" Width="15" />
</StackPanel>
</Button>
<Button Height="23" x:Name="btnMax" Background="Black" HorizontalAlignment="Right" Margin="0,5,28,0" VerticalAlignment="Top" Width="24" BorderThickness="0">
<StackPanel Orientation="Horizontal">
<Image x:Name="imgMax" Stretch="Fill" Source="Resources/Maximize-1.png" Height="15" Width="15" HorizontalAlignment="Right" />
</StackPanel>
</Button>
<Button Height="23" x:Name="btnClose" Background="Black" HorizontalAlignment="Right" Margin="0,4,4,0" VerticalAlignment="Top" Width="24" BorderThickness="0">
<StackPanel Orientation="Horizontal">
<Image Stretch="Fill" Source="Resources/Shut down-2.png" Height="15" Width="15" HorizontalAlignment="Right" />
</StackPanel>
</Button>
</Grid>
</Border>
<!--中部-->
<Border>
<DockPanel>
<AdornerDecorator>
<ContentPresenter />
</AdornerDecorator>
</DockPanel>
</Border>
<!--尾部-->
<Border x:Name="FooterGrid" CornerRadius="0 0 15 15" Background="Black" Height="27" VerticalAlignment="Bottom">
<Grid >
<TextBlock x:Name="txtVersion" TextDecorations="Underline" TextAlignment="Center" Foreground="White" Text="当前版本:23.05.12" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Bottom" FontSize="14" Height="25" Cursor="Hand" Margin="12,0,0,0"/>