WPF 自定义用户控件(Content根据加减按钮改变值)
前端代码:
<UserControl.Resources><Style x:Key="Num_Button_Style" TargetType="Button"><Setter Property="MinWidth" Value="30" /><Setter Property="Height" Value="35" /><Setter Property="Margin" Value="0" /><Setter Property="VerticalContentAlignment" Value="Center" /><Setter Property="HorizontalContentAlignment" Value="Center" /><Setter Property="FontSize" Value="16" /><Setter Property="Foreground" Value="White" /><Setter Property="BorderThickness" Value="0" /><Setter Property="Background" Value="#12D269" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Borderx:Name="border"Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"SnapsToDevicePixels="True"><TextBlockHorizontalAlignment="Center"VerticalAlignment="Center"FontSize="{TemplateBinding FontSize}"Foreground="{TemplateBinding Foreground}"Text="{TemplateBinding Content}" /></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#4662D9" /></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="border" Property="Background" Value="#4662D9" /></Trigger><Trigger Property="IsEnabled" Value="False"><Setter TargetName="border" Property="Background" Value="#7Ec0EE" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="btnStyle" TargetType="Button"><Setter Property="Foreground" Value="#12D269" /><Setter Property="Width" Value="20" /><Setter Property="Height" Value="35" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type Button}"><BorderName="PART_Background"Background="Transparent"BorderBrush="#12D269"BorderThickness="1,1,0,1"CornerRadius="3,0,0,3"><ContentPresenterHorizontalAlignment="Center"VerticalAlignment="Center"Content="{TemplateBinding ContentControl.Content}" /></Border></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontWeight" Value="Bold" /><Setter Property="Cursor" Value="Hand" /><Setter Property="Foreground" Value="Black" /></Trigger></Style.Triggers></Style> </UserControl.Resources><Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"><Grid.ColumnDefinitions><ColumnDefinition Width="1*" /><ColumnDefinition Width="3*" /><ColumnDefinition Width="1*" /></Grid.ColumnDefinitions><Buttonx:Name="up"Grid.Column="2"Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:NumericUpDown}, Path=UpCommand}"CommandParameter="{Binding}"Content="+"Style="{StaticResource btnStyle}"><Button.Template><ControlTemplate TargetType="{x:Type Button}"><BorderName="PART_Background"Background="Transparent"BorderBrush="#12D269"BorderThickness="0,1,1,1"CornerRadius="0,3,3,0"><ContentPresenterHorizontalAlignment="Center"VerticalAlignment="Center"Content="{TemplateBinding ContentControl.Content}" /></Border></ControlTemplate></Button.Template></Button><ButtonGrid.Column="1"MinWidth="50"Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:NumericUpDown}, Path=ConfirmCommand}"CommandParameter="{Binding}"Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:NumericUpDown}, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"Style="{StaticResource Num_Button_Style}" /><Buttonx:Name="down"Grid.Column="0"Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:NumericUpDown}, Path=DownCommand}"CommandParameter="{Binding}"Content="-"Style="{StaticResource btnStyle}" /></Grid></UserControl>
后台注册的 属性及事件:
public string Text {get { return (string)GetValue(TextProperty); }set { SetValue(TextProperty, value); }} public static readonly DependencyProperty TextProperty =DependencyProperty.Register("Text", typeof(string), typeof(NumericUpDown), new PropertyMetadata(default(string)));private void Button_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e){if (e.Key == Key.Enter){e.Handled = true; // 禁用回车键}}public object CommandParameter{get{return GetValue(CommandParameterProperty);}set{SetValue(CommandParameterProperty, value);}}public static readonly DependencyProperty CommandParameterProperty =DependencyProperty.Register("CommandParemeter", typeof(object), typeof(NumericUpDown), new PropertyMetadata(default(object)));public ICommand UpCommand{get { return (ICommand)GetValue(UpCommandProperty); }set { SetValue(UpCommandProperty, value); }}public static readonly DependencyProperty UpCommandProperty =DependencyProperty.Register("UpCommand", typeof(ICommand), typeof(NumericUpDown), new PropertyMetadata(default(ICommand)));public ICommand DownCommand{get { return (ICommand)GetValue(DownCommandProperty); }set { SetValue(DownCommandProperty, value); }}public static readonly DependencyProperty DownCommandProperty =DependencyProperty.Register("DownCommand", typeof(ICommand), typeof(NumericUpDown), new PropertyMetadata(default(ICommand)));public ICommand ConfirmCommand{get { return (ICommand)GetValue(ConfirmCommandProperty); }set { SetValue(ConfirmCommandProperty, value); }}public static readonly DependencyProperty ConfirmCommandProperty =DependencyProperty.Register("ConfirmCommand", typeof(ICommand), typeof(NumericUpDown), new PropertyMetadata(default(ICommand)));
功能引用的部分:
<DataGridGrid.Column="0"Height="{Binding ElementName=DGHeight, Path=ActualHeight}"AutoGenerateColumns="False"Background="White"CanUserReorderColumns="False"CanUserResizeColumns="False"CanUserResizeRows="False"HorizontalScrollBarVisibility="Hidden"IsReadOnly="True"ItemsSource="{Binding DataGridList_BindSources, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"SelectedItem="{Binding SelectBindItem}"SelectionMode="Single"SelectionUnit="FullRow"VerticalScrollBarVisibility="Hidden"><DataGrid.ColumnHeaderStyle><Style TargetType="DataGridColumnHeader"><Setter Property="HorizontalContentAlignment" Value="Center" /><Setter Property="Background" Value="#E8e8e8" /><Setter Property="BorderThickness" Value="1,1,1,1" /><Setter Property="BorderBrush" Value="#ffffff" /><Setter Property="Height" Value="50" /></Style></DataGrid.ColumnHeaderStyle><DataGrid.Columns><DataGridTemplateColumnWidth="50*"MinWidth="50"Header="BindName"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBlockHorizontalAlignment="Center"VerticalAlignment="Center"Text="{Binding BindName}" /></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn> <DataGridTemplateColumn Width="550*" Header="Button"> <DataGridTemplateColumn.CellTemplate><DataTemplate><Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Grid Margin="0,0,10,0"><uc:NumericUpDownConfirmCommand="{Binding DataContext.NumvalueCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"DownCommand="{Binding DataContext.NumValueSubCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"IsEnabled="{Binding NumvalueBtnEnableLst, Converter={StaticResource ButtonEnable}, ConverterParameter=Numvalue_ADD, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"Text="{Binding Numvalue, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"UpCommand="{Binding DataContext.NumvalueAddCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" /></Grid></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid>
相关文章:
WPF 自定义用户控件(Content根据加减按钮改变值)
前端代码: <UserControl.Resources><Style x:Key"Num_Button_Style" TargetType"Button"><Setter Property"MinWidth" Value"30" /><Setter Property"Height" Value"35" />&l…...
CPU、GPU、显卡
CPU VS GPUCPU(Central Processing Unit),中央处理器GPU(Graphics Processing Unit),图形处理单元GPU 的技术演变CUDA(Compute Unified Device Architecture) 显卡(Video…...
深入理解 Django 自定义用户模型
1. 引言 Django 作为一个强大的 Web 框架,内置了用户认证系统。然而,实际项目中我们通常需要扩展用户模型,以满足不同的业务需求。Django 提供了继承 AbstractUser 的方式,让我们能够轻松地定制用户模型。本文将通过一个自定义用…...
顺序表和链表的区别
顺序表和链表的区别 不同点顺序表链表(带头双向循环)存储空间物理上一定连续逻辑上连续物理上不一定连续随机访问(用下标随机访问)支持:O(1)不支持:O(N)任意位置插入或者删除元素可能需要搬移元素…...
系分-数据库总结
历年试题2024年05月试题 BCN范式,模式分解,触发器类型2023年05月试题 NoSQL基本特点,NoSQL对比,混合数据库2022年05月试题4 两段锁,事务并发,数据一致,本地事务发布20…...
new Date()解析
JavaScript 中的 new Date() 构造函数用于创建一个表示日期和时间的对象。Date 对象使得你可以以多种方式获取、设置和格式化日期和时间。让我们深入解析一下 new Date() 及其用法。 创建 Date 对象 可以通过多种方式创建 Date 对象: 不带参数: let no…...
df 的各种用法 以及与du 的区别
df的用法 在 Linux 中,“df”(disk free)是一个用于显示磁盘空间使用情况的命令。 一、主要功能 它可以列出文件系统的磁盘空间使用情况,包括磁盘总容量、已使用空间、可用空间以及使用率等信息。 二、常见用法及参数 基本用法&a…...
2024年下半年软考准考证什么时候打印?
2024年下半年软考准考证打印入口网址如下: https://bm.ruankao.org.cn/sign/welcome 广东的同学特别注意:准考证打印截止时间是11月8号,也就是考试前一天。一定要提前打印准考证,考试当天是无法打印的。 2024年下半年软考准考证…...
企业安全运行与维护(Enterprise Security Operation and Maintenance)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
每日“亿“题 东方博宜OJ 1424-自然数的分解
原题链接:1424 - 自然数的分解-东方博宜OJ 题目描述 给定自然数 n ,将其拆分成若干自然数的和。输出所有解,每组解中数字按从小到大排列。相同数字的不同排列算一组解。 如,读入整数 3 ,分解方案如下: …...
初识Linux · 文件(1)
目录 前言: 回顾语言层面的文件 理解文件的预备知识 文件和磁盘 使用和认识系统调用函数 前言: 本文以及下篇文章,揭露的都是Linux中文件的奥秘,对于文件来说,初学Linux第一节课接触的就是文件,对于C…...
【MYSQL】mysql约束---自增长约束(auto_increment)
1、概念 在Mysql中,当主键为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。 注意:自增长约束通常与主键放在一起使用。 通过给…...
基于STM32设计的智能学习台灯(华为云IOT)(238)
文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成【4】ESP8266工作模式配置1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要1.4 开发工具的选择【1…...
网络层协议 --- IP
序言 在这篇文章中我们将介绍 IP协议,经过这篇文章的学习,我们就会了解运营商到底是如何为我们提供服务的以及平时我们所说的内网,公网到底又是什么,区别是什么? IP 地址的基本概念 1. IP 地址的定义 每一个设备接入…...
Java虚拟机(JVM)介绍
**Java虚拟机(JVM)**是Java平台的核心组件,它提供了一个运行时环境,使得Java程序可以在不同的操作系统和硬件平台上运行而无需修改。 JVM的架构 JVM主要由以下几个部分组成: 类加载器(Class Loader…...
1000题-计算机网络系统概述
术语定义与其他术语的关系SDU(服务数据单元)相邻层间交换的数据单元,是服务原语的表现形式。在OSI模型中,SDU是某一层待传送和处理的数据单元,即该层接口数据的总和。 - SDU是某一层的数据集,准备传递给下一…...
Authentication Lab | IP Based Auth Bypass
关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客 0x01:IP Based Auth Bypass 前情提要 有些开发人员为了图方便,会给站点设置一个 IP 白名单,如果访问站点的用户的 IP 在白名单内,则允许访…...
linux中的火墙优化策略
1.火墙介绍 1. netfilter 2. iptables 3. iptables | firewalld 2.火墙管理工具切换 在rocky9 中默认使用的是 firewalld firewalld -----> iptables dnf install iptables - services - y systemctl stop firewalld systemctl disable firewalld systemctl mask fi…...
GO网络编程(三):海量用户通信系统1:登录功能初步
一、准备工作 需求分析 1)用户注册 2)用户登录 3)显示在线用户列表 4)群聊(广播) 5)点对点聊天 6)离线留言 主界面 首先,在项目根目录下初始化mod,然后按照如下结构设计目录: 海量用户通信系统/ ├── go.mod ├── client/ │ ├──…...
Windows安全加固详解
一、补丁管理 使用适当的命令或工具,检查系统中是否有未安装的更新补丁。 Systeminfo 尝试手动安装一个系统更新补丁。 • 下载适当的补丁文件。 • 打开命令提示符或PowerShell,并运行 wusa.exe <patch_file_name>.msu。 二、账号管…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
