自定义控件.DateTimePicker_02

2023-10-26

ZC:踩坑过程在 后面

1、在 Generic.xaml 中添加内容

<ResourceDictionary
    x:Class="WpfCustomControlLibrary_DateTimePicker.Themes.Generic"  <!--ZC: 如果有事件触发的话,需要加这一句-->
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfCustomControlLibrary_DateTimePicker">
    <Style TargetType="{x:Type local:DateTimePickerZ}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:DateTimePickerZ}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">



                        <!-- ZC: 这里面的部分是 自己添加的,外层的是 原来的 -->
                        <!-- ZC: Calendar 貌似要到 .net4.0才有 ? -->
                        <StackPanel>
                            <Calendar x:Name="calendar1" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Black"/>
                            <Border x:Name="border1" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Black" Background="Transparent" Margin="0,-3,0,0" >
                                <StackPanel Orientation="Horizontal">
                                    <StackPanel Orientation="Horizontal">
                                        <TextBox Text="{Binding Hour, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent" />
                                        <Label VerticalAlignment="Center" Content=":" FontSize="12" />
                                        <TextBox Text="{Binding Minute, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent"/>
                                        <Label VerticalAlignment="Center" Content=":" FontSize="12" />
                                        <TextBox Text="{Binding Second, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent"/>
                                    </StackPanel>


                                    <Grid VerticalAlignment="Stretch">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="50*"></RowDefinition>
                                            <RowDefinition Height="50*"></RowDefinition>
                                        </Grid.RowDefinitions>
                                        <Button Grid.Row="0"  VerticalAlignment="Stretch" Width="30" x:Name="btnUp">
                                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 8 L 5 0 L 10 8 Z">
                                                <Path.Fill>
                                                    <SolidColorBrush Color="Black" />
                                                </Path.Fill>
                                            </Path>
                                        </Button>
                                        <Button Grid.Row="1" VerticalAlignment="Stretch" Width="30" Click="Click_Down">
                                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 5 8 L 10 0 Z" Margin="0,1,0,0">
                                                <Path.Fill>
                                                    <SolidColorBrush Color="Black" />
                                                </Path.Fill>
                                            </Path>
                                        </Button>
                                    </Grid>

                                    <Button  Margin="0,0,0,0" VerticalAlignment="Stretch" Width="36" BorderBrush="Black">
                                        <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 8 L 5 0 L 10 8" Margin="2,4,0,0" Stroke="Black" StrokeThickness="4" />
                                    </Button>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                        
                        
                        
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

 

2、在 Themes文件夹中添加 类Generic.xaml.cs  (创建的 Generic.xaml.cs 和 Generic.xaml 的路径关系如下面的图中显示的那样)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace WpfCustomControlLibrary_DateTimePicker.Themes
{
    partial class Generic// ZC: 与Generic.xaml关联的话,需要加上关键字"partial"
    {
        void Click_Down(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Click_Down(...)");
            MessageBox.Show("Click_Down(...)");
        }

    }// class
    
}

 2.1、

  

 

  2.2、

  

 

3、ZC:之前 不知道 怎么在Generic.xaml里面弄 类似 按钮事件的代码。查到说,添加类 写事件代码,然后要在 Generic.xaml中的ResourceDictionary节点添加 "x:Class"属性,老是提示 错误(忘了具体是什么了...),然后还 又添加了 一个别的什么属性,但是 还是出错,搞不定。搜来搜去也找不到太多关于这个的知识点...

 3.1、找到了这一篇文章:ControlTemplate的ResourceDictionary中的WPF事件 - 代码日志.html(https://codeday.me/bug/20180705/189758.html

ResourceDictionary可以像Windows等一样在后面的代码,所以你可以添加一个事件处理程序,并从那里调用DragMove
设置后面的代码需要几个步骤。

>如果您的ResourceDictionary被称为MetroStyleResourceDictionary.xaml,则可以在Visual Studio中的同一文件夹中添加一个名为MetroStyleResourceDictionary.xaml.cs的新文件
>文件后面的代码应该是这样的
public partial class MetroStyleResourceDictionary
{
    //...
}
>之后,您需要将x:Class属性添加到Xaml文件
<ResourceDictionary x:Class="YourNamespace.MetroStyleResourceDictionary"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--...-->
</ResourceDictionary>
现在,您可以为MouseLeftButtonDown的dragRectangle添加一个事件处理程序。您还需要抓住“窗口”,使其成为一个很好的主意
<Rectangle Name="dragRectangle"
           MouseLeftButtonDown="dragRectangle_MouseLeftButtonDown"
           Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
           .../>
最后,您可以将事件处理程序添加到文件后面的代码中,如下所示
public partial class MetroStyleResourceDictionary
{
    void dragRectangle_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        Rectangle dragRectangle = sender as Rectangle;
        Window window = dragRectangle.Tag as Window;
        if (window != null)
        {
            window.DragMove();
        }
    }
}

   ZC:终于知道 自己之前为什么失败了... 原来 创建的类的 类文件名 需要与 xaml文件有对应关系,如我的 xaml文件名为"Generic.xaml"  则创建的 类的文件名就应该是"Generic.xaml.cs",然后再在 "x:Class"中 指明对应的类

4、

5、

 

转载于:https://www.cnblogs.com/csskill/p/11587569.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义控件.DateTimePicker_02 的相关文章

  • fork之后子进程到底复制了父进程什么

    fork之后子进程到底复制了父进程什么 发表于2015 4 3 9 54 08 2161人阅读 分类 操作系统 include
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • Tomcat7安装及配置教程

    Apache Tomcat7 0安装及配置教程 Apache Tomcat7 0官方网站链接 http tomcat apache org apache tomcat 7 0 73 windows x64 先解压下载的压缩包 然后在bin目
  • Minikube 架构及启动流程剖析

    原文作者 wzqnls 编辑 夏天 对于要学习 Kubernetes 或者需要本地开发的开发人员来说 Minikube 是一个不错的选择 通过使用 Minikube 这个工具 我们可以非常快捷地在本地部署一套单节点的 Kubernetes
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • Linux网络安全-Zabbix入门(一)

    一 基本概念 1 监控目的 运行情况 提前发现问题 2 监控资源类别 公开 tcp udp 端口 私有 cpu 磁盘 监控一切需要监控的东西 只要能够想到 能够用命令实现的都能用来监控 如果想远程管理服务器就有远程管理卡 比如Dell id
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • Windows 添加永久静态路由

    route add p 10 10 0 0 mask 255 255 0 0 10 10 6 1 p 参数 p 即 persistent 的意思 p 表示将路由表项永久加入系统注册表
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • Ubuntu9.04太多乱码(中文不能正常显示)

    最近在使用Ubuntu9 04的过程中 发现有好多地方都出现乱码 其实是中文不能正常显示 现在把我所遇到的所有乱码问题集中一下 方便以后查阅参考 一 Flash乱码 在终端输入 sudo gedit etc fonts conf d 49
  • 图解五种磁盘调度算法, FCFS, SSTF, SCAN, C-SCAN, LOOK

    一 FCFS 调度 先来先服务 磁盘调度的最简单形式当然是先来先服务 FCFS 算法 虽然这种算法比较公平 但是它通常并不提供最快的服务 例如 考虑一个磁盘队列 其 I O 请求块的柱面的顺序如下 98 183 37 122 14 124
  • 操作系统常见面试题

    1 什么是进程 Process 和线程 Thread 有何区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动 进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • CentOS Linux服务器安全设置

    转自 http www osyunwei com archives 754 html 引言 我们必须明白 最小的权限 最少的服务 最大的安全 所以 无论是配置任何服务器 我们都必须把不用的服务关闭 把系统权限设置到最小话 这样才能保证服务器
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process

随机推荐

  • Taro小程序 URL、String生成二维码

    先在 wxml 文件中 创建绘制的 canvas 并定义好 width height canvasId
  • 命令执行漏洞挖掘技巧分享

    1 1 前言 1 第三方开源通用框架 第三方类库的使用 如Struts Jenkins等 2 业务逻辑处理直接拼接用户可控参数区执行系统命令或者拼凑回调函数代码 中途无任何安全过滤比如说 应用有时需要调用一些执行系统命令的函数 如PHP中的
  • 实现修改代码后刷新页面即可得到结果

    关于devtools实现热加载 相信很多刚入idea的小伙伴们 对调试一次代码就要重新启动一次服务感到非常的厌倦 那么这次我就来教大家 如何应用devtools这个开发者工具包实现只要启动一次服务器 刷新页面即可得到修改结果的效果 1 首先
  • 20191004在LINUX下如何将tar压缩文件解压到指定的目录下

    百度搜索 tar 解压缩到指定目录 https zhidao baidu com question 9844116 html 在LINUX下如何将tar压缩文件解压到指定的目录下 各位 请教一下在LINUX下如何将tar压缩文件解压到指定的
  • 硬盘安装Freebsd7.0无痛快速版

    硬盘安装Freebsd成功了 安装Freebsd 7 0 最小系统在 我的老笔记本上 toshiba portege 3490ct 用时10分钟 1 去 sourceforge net 下载一个 unetbootinhttp downloa
  • API 和ABI的区别

    应用程序二进制接口 ABI Application Binary Interface 定义了一组在PowerPC系统软件上编译应用程序所需要遵循的一套规则 主要包括基本数据类型 通用寄存器的使用 参数的传递规则 以及堆栈的使用等等 ABI涵
  • 前端CSS权重你了解吗?

    CSS权重 CSS权重指的是样式的优先级 有两条或多条样式作用于一个元素 权重高的那条样式对元素起作用 权重相同的 后写的样式会覆盖前面写的样式 权重的等级 可以把样式的应用方式分为几个等级 按照等级来计算权重 1 important 加在
  • 研究生毕业致谢感言

    时光荏苒 转眼便已进入硕士研究生的尾声 如果以相机倒带的形式回顾过去两年半的时间里 有为了研修学分而奔波于教室和图书馆之间的镜头 有为了做实验写论文埋头苦干到深夜的镜头 有受过打击受过伤害 相然也有喜悦振臂高呼的镜头 硕士研究生的结果很美好
  • python设置画图风格_Python可视化33

    本文详细介绍matplotlib 绘图风格 style 及rcParams设置 本文速览 1 rcParams默认参数修改 rcParams中默认参数绘图 修改rcParams默认参数 取消rcParams参数修改 2 绘图风格设置 wit
  • Python入门之Lambda函数

    匿名函数的定义 在 Python 里有两类函数 第一类 用 def 关键词定义的正规函数 第二类 用 lambda 关键词定义的匿名函数 Python 使用 lambda 关键词来创建匿名函数 而非def关键词 它没有函数名 其语法结构如下
  • Java 读取任意shapefile的所有字段,并插入到MongoDB数据库(Spring Boot)

    文章目录 Java 读取任意shapefile的所有字段 并插入到MongoDB数据库 Spring Boot 1 统一返回结果封装 2 shp文件数据实体封装 3 核心代码 3 可能出现的异常 3 1 异常产生原因 3 2 解决方案 4
  • idea debug高级特性看这篇就够了

    文章目录 多线程调试 循环遍历条件断点 显示方法返回值 调试过程中动态修改变量的值 调试内存泄露 所谓工欲善其事必先利其器 从eclipse转idea也有一段时间了 一直想总结下idea调试的一些高级技巧 debug过程如果高效 撸代码也会
  • Matlab实现图像的比例缩放

    以灰度图像circuit tif为例 利用Matlab图像处理工具箱中的imresize函数对图像进行比例缩放变换 要求 创建4个figure窗口 不可以用subplot 显示不出来放大效果 分别用于显示原始图像 等比例放大1 5倍后的图像
  • 记录--vue+three,制作iview大波浪特效

    这里给大家分享我在网上总结出来的一些知识 希望对大家有所帮助 一 效果图 具体效果可参考iview官方界面iView 一套高质量的UI组件库 大波浪效果 使用的是three js的官方例子 需要先安装three js支持 npm insta
  • mysql用到了 all 和 Using temporary; Using filesort,如何优化?

    使用 EXPLAIN 分析查询的执行计划可以帮助优化查询 这两个标识表示 MySQL 需要使用临时表来执行查询 或者在查询结束时对结果进行排序 这可能会导致查询运行得更慢 要优化查询 你可以尝试以下方法 尽量避免使用 SELECT 而是只选
  • DDD(领域驱动设计)系列主题:聚合和聚合根

    本篇文章主要介绍了聚合根 聚合的概念 然后介绍了聚合的设计过程和原则 以及对比了聚合 聚合根 实体 值对象的特点 思考的问题 为什么要在限界上下文和实体之间增加聚合和聚合根的概念 它们的作用是什么 如何设计聚合 概念和职责 聚合根 如果把聚
  • 2020年数学建模国赛A题:炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • 虚拟机的快捷键

    ctrl alt 鼠标就出来了 ctrl c 中断当前操作
  • 谷粒商城--从入门到入坟(持续更新)第一篇:总体概括

    简介 谷粒商城项目 是尚硅谷的一套基于微服务的电商视频 在网上大受欢迎 本人系大三老狗 准备用大约一个月时间 去拆解该商品的知识点 由点及面 最后希望呈现一个比较好的效果 每个知识点 配套的安装软件及源码也会发布出来 希望有伙伴能一起进步
  • 自定义控件.DateTimePicker_02

    ZC 踩坑过程在 后面 1 在 Generic xaml 中添加内容