WPF自定义窗口基类

WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义。继承自定义窗口的类xaml文件的根节点就不再是<Window>,
而是自定义窗口类名(若自定义窗口与继承者不在同一个命名空间,还得加上命名空间),继承自定义窗口类后台代码也得修改为继承自自定义窗口
exp:

//继承Window类的自定义窗口类
namespace WPF_Study.Entity
{
   using System.Windows;

   public class WindowBase:Window
    {
        private const int Fixed_Width = 540;
        private const int Fixed_Height = 350;

        public WindowBase() : base()
        {
            this.MaxWidth = Fixed_Width;
            this.MaxHeight = Fixed_Height;
            this.MinWidth = Fixed_Width;
            this.MinHeight = Fixed_Height;
        }
    }
}

//继承自定义窗口
//xaml文件
<localEntity:WindowBase x:Class="WPF_Study.TestWindowBase"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:localEntity="clr-namespace:WPF_Study.Entity"
        Title="TestWindowBase" >
    <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Width" Value="60"/>
                <Setter Property="Height" Value="30"/>
                <Setter Property="Margin" Value="5"/>
            </Style>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition Height="40*"/>
            <RowDefinition Height="221*"/>
        </Grid.RowDefinitions>
        <WrapPanel Grid.Row="0" Grid.Column="0">
            <Button Content="查询" x:Name="btnSearch"></Button>
            <Button Content="新增" x:Name="btnAdd"></Button>
            <Button Content="修改" x:Name="btnAmend"></Button>
            <Button Content="删除" x:Name="btnDelete"></Button>
        </WrapPanel>
        <DataGrid x:Name="dataGrid" AutoGenerateColumns="False" Grid.Row="2" Grid.Column="0" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="窗口编号" Binding="{Binding Win}"/>
                <DataGridTextColumn Header="评价器地址" Binding="{Binding Evalutor}"/>
                <DataGridTextColumn Header="条屏地址" Binding="{Binding StripeScreen}"/>
                <DataGridTextColumn Header="IP" Binding="{Binding IP}"/>
                <DataGridTextColumn Header="注册设备号" Binding="{Binding RegNum}"/>
                <DataGridTextColumn Header="描述" Binding="{Binding Description}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</localEntity:WindowBase>
//对应后台代码
using WPF_Study.Entity;

namespace WPF_Study
{
    /// <summary>
    /// Interaction logic for TestWindowBase.xaml
    /// </summary>
    public partial class TestWindowBase : WindowBase
    {
        public TestWindowBase()
        {
            InitializeComponent();
        }
    }
}

  

时间: 2025-01-18 07:54:26

WPF自定义窗口基类的相关文章

WPF 自定义窗口

在WPF中我们经常需要抛去windows自带的窗口的样式,设定一些自定义样式的窗口,这个时候我们需要设定 WindowStyle="None" 来移除windows自带的界面样式.除此之外我们还需要设定 AllowsTransparency ="True" 来让窗口支持透明的效果. 这里分享一个 自定义窗口的demo,该demo实现的基本功能有: 实现自定义窗口的最小化.最大化.还原.关闭功能,默认为最大化: 最小化.最大化.还原.关闭按钮在捕获鼠标之后会有动画改变

wpf之mvvm基类

当我们用MVVM设计模式的时候要实现INotifyPropertyChanged,每次都要实现这个接口比较麻烦,所以基类的作用就体现出来了.代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

WPF 自定义窗口关闭按钮

关闭图标设计主要涉及主要知识点: 1.Path,通过Path来画线.当然一般水平.竖直也是可以用Rectangle/Border之类的替代 一些简单的线条图标用Path来做,还是很方便的. 2.简单的动画,Animation用法 Button样式如下: <Button x:Name="BtnClose" Click="BtnClose_OnClick"> <Button.Template> <ControlTemplate Target

修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

折腾几天记载一下,由于项目实际需要,从edmx生成的实体类能自动继承自定义的基类,这个基类不是从edmx文件中添加的Entityobject. 利用ADO.NET C# POCO Entity Generator With WCF Support生成的tt文件(比如model.tt)中找到 partial class partial class 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类

《Programming WPF》翻译 第9章 2.选择一个基类

原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类,并且说明了他们之间的继承关系.注意到,这决不是完整的继承关系图,只是简单的显示了一些你应该考虑的可能的基类. 无论你选择了哪一个基类,你的元素都会直接或间接地从FrameworkElement派生.这将提供routing事件,高级属性处理,动画,数据绑定,外观上的支持,样式,以及逻辑树的集成. 派生于Fram

WPF中使用WindowChrome自定义窗口中遇到的最大化问题

原文:WPF中使用WindowChrome自定义窗口中遇到的最大化问题 FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shell.windowchrome.aspx 如果你是旧版本,可以去搜索单独的dll. 上方的页面,解释和例子也都是旧版本的,如果新版本,比如和我一样,是4.6.2,可以继续往下看新的用法,相比文档中的旧方式,新的用法的确更简单有效了

编写高质量代码改善C#程序的157个建议——建议23:避免将List&lt;T&gt;作为自定义集合类的基类

建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合类,需要扩展的泛型接口通常是IEnumerable<T>和ICollection<T>(或ICollection<T>的子接口,如IList<T>),前者规范了集合类的迭代功能,后者规范了一个集合通常会有的操作. 一般的情况下,下面两个实现的集合类都能完成默认的

制作可自定义风格的winform组件类(三)基类

一个良好的基类能决定这个控件能走多远,那么下面来定义一些事情. 定义状态,表示控件当前处于哪种状态,用来区别对同一事件作出不同的响应 [Flags] public enum CDControlState { None = 0, SkinLoaded = 1, MouseEnter = 2, MouseDown = 4, Resizing = 8, } 定义事件,用来定制需求,忽略无用的代码,以免造成过多响应或是窗口重绘 [Flags] public enum CDControlEvent { N

WPF开发时光之痕日记本(二)—— WVVM基类

当我们用MVVM的时候要实现INotifyPropertyChanged,每次都要实现这个接口比较麻烦,所以基类的作用就体现出来了.代码如下: public class ViewModelBase : INotifyPropertyChanged, IDisposable { public event PropertyChangedEventHandler PropertyChanged; public bool IsInDesignMode; /// <summary> 显示名称 </