zoukankan      html  css  js  c++  java
  • wpf日历控件制作过程分析(1)定义header

    希望通过分析能更好的理解wpf控件的开发



    一.日历的header布局

    包含两部分,两个按钮和一个Title



    首先定义按钮的样式(随自己定),可以先定义几个状态为普通状态,鼠标经过状态,按下状态和禁用4个状态显示不同的样式.其中按钮上还有一个小三角.所以还要定义一个三角的Geometry

    代码开始

    1.画出Geometry(涉及知识点为Geometry的画法及迷你语法,如M Z等)
    <PathGeometry x:Key="geometry" Figures="M0,0 4.5,4 9,0 5.5,0 4.5,1 3.5,0z"/>

    2.定义4个不同状态下的笔刷(可自由发挥)

    Code

    3.定义按钮样式,按钮上再使用上面的笔刷
    Code

    注意点
    1.这里的TargetType是ButtonBase,因为有可能按钮是Button或RepeatButton都有可能,这里指向为ButtonBase是一种通用的做法
    2.为何不直接定义还要为Button定义样式?,这里提供的样式为默认样式(下面我们会讲到)
    3.ComponentResourceKey将资源定义在指定程序集中,在后端访问的方法如下
    FindResource(new ComponentResourceKey(typeof(MonthCalendar), "PreviousButtonStyleKey")) as Style;

    4.定义Title类,在静态构造函数中用OverrideMetadata方法重写样式(多数控件都需要这么做)

            static MonthCalendarTitle()
            
    {
                DefaultStyleKeyProperty.OverrideMetadata(
    typeof(MonthCalendarTitle), new FrameworkPropertyMetadata(typeof(MonthCalendarTitle)));
            }

    然后定义一个Title

    Code

    注意上面黑字,这里使用了数据绑定的类型转换器,只要给这个控件指定数据源就可以了,其作用是把日期转换上面第二张截图的格式

    5.整合header

    Code

    注意点:
    1.使用DataContext作为数据源
    2.用RepeatButton当作按钮(可重复触发事件)
    3.使用LayoutTransform翻转Geometry图形
    4.自定义样式TitleStyle,默认为空
    5.未见RepeatButton使用定义的ButtonBase样式?(可与第四点比较)

    下次继续
  • 相关阅读:
    OpenGL编程 基础篇(七)对象的变换——用实心体绘制3D场景
    mysql在查询结果列表前添加一列递增的序号列(最简)
    将中文字符串分割为数组 解决str_split中文乱码php
    file_get_contents 抓取网页乱码。
    js下的sleep实现
    js获取当前时间(昨天、今天、明天)
    JPA为字段设置默认值
    js实现点击按钮弹出上传文件的窗口
    Bootstrap使用模态框modal实现表单提交弹出框
    springboot使用Freemarker继承
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1224702.html
Copyright © 2011-2022 走看看