WPF设计标准学习记录17

在控件中的ControlTemplate的触发器

<Button Content="将ControlTemplate定义在在控件中" Width="280" Height="40" Margin="10" Foreground="#747787"><Button.Template><ControlTemplate TargetType="Button"><Border x:Name="border" Background="Transparent" CornerRadius="5" BorderThickness="1" BorderBrush="#C9CCD5"><ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Content" Value="MouseOver" TargetName="contentPresenter"/></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Content" Value="将ControlTemplate定义在在控件中" TargetName="contentPresenter"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Button.Template>
</Button>
元素类型属性名称属性值/技术说明核心作用与优化建议
ButtonContent"将ControlTemplate定义在在控件中"文本硬编码,建议改用资源绑定{x:Static}
Width280(固定宽度违反响应式规范,建议MinWidth="260"企业规范:HIG-2025-UI-003
Height40(固定高度限制多语言扩展,应启用SizeToContent
Margin10(统一外边距,推荐分层定义如Margin="5,10"
Foreground#747787(文字颜色未绑定到模板,需通过TemplateBinding传递)关键缺陷:颜色未生效
Button.TemplateTargetTypeButton(限定模板作用域)
ControlTemplate嵌套结构定义按钮视觉树(透明背景+动态内容切换)
Borderx:Name"border"(命名元素便于触发器操作)应添加CacheMode="BitmapCache"优化渲染
BackgroundTransparent(透明背景可能影响点击区域检测)建议改用{x:Null}彻底移除背景层
CornerRadius5(圆角标准需统一,推荐引用资源CornerRadius.Medium
BorderThickness1(高DPI屏幕建议采用1.5)
BorderBrush#C9CCD5(浅灰边框,应引用资源BorderSecondary
ContentPresenterx:Name"contentPresenter"(命名便于触发器控制)
HorizontalAlignmentCenter(内容居中,但未同步TextBlock.TextAlignment
VerticalAlignmentCenter(符合企业布局规范)
ControlTemplate.Triggers交互逻辑通过触发器实现鼠标悬停内容切换逻辑缺陷:直接修改内容而非样式
TriggerPropertyIsMouseOver(检测悬停状态)
ValueTrue/False(触发条件)
Setter.TargetNamecontentPresenter(操作目标元素)
Setter.PropertyContent(错误操作:应修改样式属性而非内容)违反MVVM模式
Setter.Value"MouseOver"/原文本(硬编码内容,需改用DynamicResource

关键技术缺陷与改进方案

1. 内容与样式逻辑混淆
<!-- 错误实现:直接修改内容 -->
<Setter Property="Content" Value="MouseOver"/><!-- 正确方案:修改视觉属性 -->
<Setter TargetName="border" Property="BorderBrush" Value="#4A90E2"/>
<Setter TargetName="contentPresenter" Property="Foreground" Value="White"/>

在Resources定义的ControlTemplate的触发器

<Window.Resources><ControlTemplate x:Key="ButtonTemplate" TargetType="Button"><Border Background="#C6D2FC" CornerRadius="5" BorderThickness="1" BorderBrush="#545BAD"><ContentPresenter  HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Width" Value="300"/></Trigger><Trigger Property="IsMouseOver" Value="False"><Setter Property="Width" Value="280"/></Trigger></ControlTemplate.Triggers></ControlTemplate>
</Window.Resources><Button Content="将ControlTemplate定义在资源中" Template="{StaticResource ButtonTemplate}" Height="40" Margin="10" Foreground="#707CA5"/>
元素类型属性名称属性值/技术说明优化建议与规范参考
Window.Resources资源容器声明定义全局可复用的控件模板资源
ControlTemplatex:KeyButtonTemplate(资源键名,需符合大驼峰命名法)建议分离至独立资源字典Styles.xaml
TargetTypeButton(限定模板仅适用于按钮控件)
BorderBackground#C6D2FC(浅蓝色背景,应改用资源引用<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DeepSeek原理学习2】MLA 多头隐变量注意力

解决的问题 Multi-Head Latent Attention&#xff0c;MLA——解决的问题&#xff1a;KV cache带来的计算效率低和内存需求大以及上下文长度扩展问题。 MLA原理 MLA原理&#xff1a;其核心思想是将键&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;矩阵压缩到…

LabVIEW 开发如何降本增效

在 LabVIEW 开发领域&#xff0c;如何在确保项目质量的同时降低开发成本&#xff0c;是众多企业和开发者共同关注的焦点。这不仅关乎资源的高效利用&#xff0c;更影响项目的投资回报率和市场竞争力。下面&#xff0c;我们将从多个维度深入剖析降本策略&#xff0c;并结合具体案…

原理图输出网表及调入

一、输出网表操作步骤 &#xff08;1&#xff09;选中.dsn文件&#xff0c;选者N或进入tools下拉列表选择Creat Netlists &#xff08;2&#xff09;导出网表后的文件 二、网表的导入 &#xff08;1&#xff09;执行菜单命令“File-Import-Logic/netlist”&#xff0c;将原理…

MyBatis 分页插件使用教程

MyBatis 分页插件使用教程 MyBatis 是一款优秀的持久层框架&#xff0c;但原生的 MyBatis 并不支持分页查询。为了简化分页操作&#xff0c;MyBatis 官方和第三方提供了多种分页插件&#xff0c;最常用的就是 MyBatis-Plus 的分页插件。本文详细介绍 MyBatis-Plus 分页插件的使…

目录穿越 + pickle反序列化 -- xyctf Signin WP

源代码 # -*- encoding: utf-8 -*-File : main.py Time : 2025/03/28 22:20:49 Author : LamentXUflag in /flag_{uuid4}from bottle import Bottle, request, response, redirect, static_file, run, route secret aapp Bottle() route(/) def index():return…

区块链技术:重塑供应链管理的未来

在当今全球化的商业环境中&#xff0c;供应链管理的复杂性和重要性日益凸显。从原材料采购到产品交付&#xff0c;供应链的每一个环节都可能影响企业的运营效率和客户满意度。随着区块链技术的兴起&#xff0c;供应链管理迎来了新的变革机遇。本文将深入探讨区块链技术在供应链…

ragflow本地部署(WSL下Ubuntu)

本地docker及 docker-compose版本 安装参考&#xff1a; 实践笔记-docker安装及配置镜像源实践笔记-docker-compose安装 1.下载源码 git clone https://github.com/infiniflow/ragflow.git2.运行docker-compose拉取镜像 cd ragflow/docker docker-compose up -d3.启动报错…

LTSPICE仿真电路:(二十六)跨阻放大器简单仿真

1.前言 由于有个机会刚好了解了下跨阻&#xff0c;简单做个这个仿真&#xff0c;实际上跨阻放大器应该要复杂的多&#xff0c;由于跨阻放大器实际上是将电流转换为电压&#xff0c;最需要注意的参数肯定是运放的偏置电流 2.跨阻放大器仿真 这篇是纯记录 这是一个将0-50uA电流…

androd的XML页面 跳转 Compose Activity 卡顿问题

解决 XML 点击跳转到 Compose Activity 卡顿问题 当从 XML 布局的 Activity 跳转到 Compose Activity 时出现卡顿现象&#xff0c;这通常是由以下几个原因导致的&#xff1a; 可能的原因及解决方案 1. Compose 首次初始化开销 问题&#xff1a;Compose 框架首次初始化需要时…

基于Python的二手房数据挖掘与可视化深度分析

一、技术框架与数据概况 1.1 技术栈构成 import pandas as pd # 数据操作(v1.3.5) import numpy as np # 数值计算(v1.21.6) from pyecharts.charts import * # 交互式可视化(v1.9.1) from sklearn.preprocessing import StandardScaler # 数据标准化(可选扩展) …

从数据到成果:R 语言在气象水文全流程中的关键技术应用

R语言在气象、水文中数据处理及结果分析、绘图实践技术应用 R 语言是一门由统计学家开发的用于统计计算和作图的语言&#xff08;a Statistic Language developed for Statistic by Statistician&#xff09;&#xff0c;由 S 语言发展而来&#xff0c;以统计分析功能见长。R …

2025最快解决root密码忘记问题或重置root密码root密码忘记了怎么办?如何最方便的找回或者重置root密码?

root密码忘记了怎么办&#xff1f;如何最方便的找回或者重置root密码&#xff1f; 1、完全不需要按照网络上的那么麻烦的操作 2、看看我们机房的物理服务器有没有默认的管理地址&#xff0c;如果有的话我们就把自己的电脑调整跟服务器一样的网段&#xff0c;用浏览器访问该服务…

面试题汇总06-场景题线上问题排查难点亮点

面试题汇总06-场景题&线上问题排查&难点亮点 【一】场景题【1】订单到期关闭如何实现【2】每天100w次登录请求,4C8G机器如何做JVM调优?(1)问题描述和分析(2)堆内存设置(3)垃圾收集器选择(4)各区大小设置(5)添加必要的日志【3】如果你的业务量突然提升100倍…

C和C++有什么区别?

C和C是两种不同的编程语言&#xff0c;虽然它们有许多相似之处&#xff0c;但也存在一些关键的区别。 C是一种过程化编程语言&#xff0c;专注于函数和流程控制&#xff0c;非常适合系统级编程。而 C是一种面向对象编程语言&#xff0c;支持类、对象和封装、继承、多态等特性。…

动态规划-杨辉三角

118.杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。输入&#xff1a;int 输出&#xff1a;二元列表 思路&#xff1a; 面向结果编程&#xff01;&#xff01;&#xff01; class Solution {public List<List<Integer>> genera…

powershell绑定按钮事件的两种方式

写一个powershell的简单GUI做本地任务&#xff0c;试验出2个方法&#xff1a; 方法1&#xff1a; function btn1_click {write-host $text1.Text -ForegroundColor Green -BackgroundColor Black }$btn1.Add_Click({btn1_click})方法2&#xff1a; $btn2_click {write-host $…

C++语言的并查集

并查集&#xff08;Union-Find&#xff09;在C中的实现与应用 引言 并查集&#xff08;Union-Find&#xff09;&#xff0c;又称为不相交集合&#xff08;Disjoint Set&#xff09;&#xff0c;是一种用于处理动态连通性问题的数据结构。它的主要功能包括合并两个集合&#x…

基于大模型的病态窦房结综合征预测及治疗方案研究报告

目录 一、引言 1.1 研究背景与目的 1.2 研究意义 二、病态窦房结综合征概述 2.1 定义与病因 2.2 临床表现与分型 2.3 诊断方法 三、大模型在病态窦房结综合征预测中的应用 3.1 大模型介绍 3.2 数据收集与预处理 3.3 模型训练与优化 四、术前预测与准备 4.1 风险预…

2026考研数学张宇武忠祥复习视频课,高数基础班+讲义PDF

2026考研数学武忠祥老师课&#xff08;网盘&#xff09;&#xff1a;点击下方链接 2026考研数学武忠祥网课&#xff08;最新网盘&#xff09; 一、基础阶段&#xff08;3-5个月&#xff09; 目标&#xff1a;搭建知识框架掌握基础题型 教材使用&#xff1a; 高数&#xff1a;…

linux命令二

1.将windows文件上传到linux 将文件传到光驱里&#xff0c;再将光驱进行挂载&#xff0c;mount 2.linux安装的文件存储 普通执行 程序 bin 配置文件 /etc 日志文件 /var/log 3.rpm 主查询 命令&#xff1a;rpm -q 包名 查询已安装的软件包 通过软件 -qa 查询所有已安装的软件包…