WPF窗体继承

本文详细介绍了如何在WPF中实现窗体继承,通过创建资源字典、后台CS文件,以及绑定和使用继承的窗体。讨论了去掉边框后的自定义绘制,包括拖动、最大化和鼠标定位等问题,并提供了继承普通窗体和消息弹窗的实例代码。
摘要由CSDN通过智能技术生成

首先需要明白一点,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"/>
             
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于开发Windows应用程序的技术框架,它提供了丰富的用户界面(UI)功能和灵活的可视化效果。在WPF中,窗体(Window)是应用程序的主要界面元素,用于呈现应用程序的内容。 在WPF中,窗体界面可以通过继承来创建和定制。窗体继承是一种面向对象的编程概念,它允许我们创建一个新的窗体类,该类可以继承WPF内置的窗体类,例如Window类。通过继承,我们可以使用基类的属性、方法和事件,并添加自定义功能和行为。 使用窗体继承可以提高代码的可重用性和可维护性。我们可以创建一个基类窗体,定义应用程序中共享的界面元素和逻辑,然后从这个基类继承子类窗体。子类窗体可以受益于基类的功能,同时还可以添加、修改或覆盖特定于自身的内容。 窗体继承还可以实现窗体样式的一致性。通过定义一个基类窗体的样式,我们可以确保所有派生的子类窗体继承和使用相同的样式,从而使应用程序的界面具有一致的外观和体验。 继承窗体界面还可以提供更灵活的自定义功能。我们可以重写基类窗体的方法、事件和属性,以满足特定的需求。同时,继承还可以让我们在基类窗体中定义一些通用的逻辑和功能,从而简化子类窗体的开发。 总之,WPF中的窗体界面继承是一种强大的编程技术,它可以提高代码的可重用性、可维护性和一致性。通过继承窗体类,我们可以创建自定义的窗体,并使用基类的功能和属性,同时还可以添加自定义的内容和行为,从而实现更灵活和功能丰富的界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值