WPF自定义模板--RadioButton

news/2024/9/15 12:25:11/ 标签: wpf

默认格式

<Style x:Key="RadioButtonStyle" TargetType="{x:Type RadioButton}"><Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/><Setter Property="Background" Value="{StaticResource RadioButton.Static.Background}"/><Setter Property="BorderBrush" Value="{StaticResource RadioButton.Static.Border}"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="BorderThickness" Value="1"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type RadioButton}"><Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True"><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><!--CornerRadius="100"  最大大小就是200 超过200 不是正圆--><Border x:Name="radioButtonBorder"Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="100" Grid.Column="0"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1,1,2,1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"><Grid x:Name="markGrid" Margin="2"><Ellipse x:Name="optionMark" Fill="{StaticResource RadioButton.Static.Glyph}" MinWidth="6" MinHeight="6" Opacity="0"/></Grid></Border><ContentPresenter x:Name="contentPresenter" Grid.Column="1" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Grid><ControlTemplate.Triggers><Trigger Property="HasContent" Value="true"><Setter Property="FocusVisualStyle" Value="{StaticResource OptionMarkFocusVisual}"/><Setter Property="Padding" Value="4,-1,0,0"/></Trigger><Trigger Property="IsMouseOver" Value="true"><Setter Property="Background" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.MouseOver.Background}"/><Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.MouseOver.Border}"/><Setter Property="Fill" TargetName="optionMark" Value="{StaticResource RadioButton.MouseOver.Glyph}"/></Trigger><Trigger Property="IsEnabled" Value="false"><Setter Property="Background" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.Disabled.Background}"/><Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.Disabled.Border}"/><Setter Property="Fill" TargetName="optionMark" Value="{StaticResource RadioButton.Disabled.Glyph}"/></Trigger><Trigger Property="IsPressed" Value="true"><Setter Property="Background" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.Pressed.Background}"/><Setter Property="BorderBrush" TargetName="radioButtonBorder" Value="{StaticResource RadioButton.Pressed.Border}"/><Setter Property="Fill" TargetName="optionMark" Value="{StaticResource RadioButton.Pressed.Glyph}"/></Trigger><Trigger Property="IsChecked" Value="true"><Setter Property="Opacity" TargetName="optionMark" Value="1"/></Trigger><Trigger Property="IsChecked" Value="{x:Null}"><Setter Property="Opacity" TargetName="optionMark" Value="0.56"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style>

解释

  1. Border: 定义了单选按钮的外观,设置了宽度、高度、边框颜色和厚度,并使用圆角(CornerRadius)创建圆形按钮。
  2. ContentPresenter: 用于显示按钮的内容,可以是文本或其他控件。
  3. Triggers: 定义了两种触发器,当IsChecked属性为True时,背景颜色变为蓝色;当IsEnabled属性为False时,背景颜色变为灰色。

自定义模板

 <Style x:Key="RadioButtonStyleDemo" TargetType="{x:Type RadioButton}"><Setter Property="FocusVisualStyle" Value="{x:Null}"/><Setter Property="Background" Value="Transparent"/><Setter Property="BorderBrush" Value="#333"/><Setter Property="Foreground" Value="#333"/><Setter Property="BorderThickness" Value="1"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type RadioButton}"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="auto" /><ColumnDefinition /></Grid.ColumnDefinitions><Border Grid.Column="0"  Width="16" Height="16"><Grid><Ellipse x:Name="OuterCircle" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1"/><Ellipse x:Name="InnerCircle" Width="8" Height="8" Fill="Blue" Visibility="Hidden"/></Grid></Border><ContentPresenter Margin="4,0,0,0" Grid.Column="1"VerticalAlignment="Center" HorizontalAlignment="Left" RecognizesAccessKey="True"/></Grid><ControlTemplate.Triggers><Trigger Property="IsChecked" Value="True"><Setter TargetName="InnerCircle" Property="Visibility" Value="Visible"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter TargetName="OuterCircle" Property="Fill" Value="Gray"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

解释

  1. Grid: 使用Grid容器来包含两个Ellipse元素,一个是外圈(OuterCircle),一个是内圈(InnerCircle)。
  2. OuterCircle: 定义了单选按钮的外圈,使用Background和BorderBrush属性。
  3. InnerCircle: 定义了单选按钮的内圈,默认情况下隐藏(Visibility设置为Hidden)。
  4. Triggers: 当IsChecked属性为True时,显示内圈;当IsEnabled属性为False时,外圈的填充颜色变为灰色。

样式:


http://www.ppmy.cn/news/1474598.html

相关文章

Java虚拟机(JVM)深入解析与性能调优

Java虚拟机&#xff08;JVM&#xff09;是Java语言的核心&#xff0c;它为Java程序提供了一个运行环境&#xff0c;使得Java程序具有跨平台的特性。深入理解JVM的工作原理对于编写高效的Java代码和进行性能调优至关重要。本文将详细介绍JVM的工作原理&#xff0c;包括内存模型、…

SQLServer的系统数据库用别的服务器上的系统数据库替换后做跨服务器连接时出现凭证、非对称金钥或私密金钥的资料无效

出错作业背景&#xff1a; 公司的某个sqlserver服务器要做迁移&#xff0c;由于该sqlserver服务器上数据库很多&#xff0c;并且做了很多的job和维护计划&#xff0c;重新安装的sqlserver这些都是空的&#xff0c;于是就想到了把系统4个系统数据库进行替换&#xff0c;然后也把…

Apache AGE 安装部署

AGE概述 概述 我们可以通过源码安装、拉取docker镜像运行、直接使用公有云三种方式中的任意一种来使用Apache AGE 获取 AGE 发布版本 可以在 https://github.com/apache/age/releases 找到发布版本和发布说明。 源代码 源代码可以在 https://github.com/apache/age 找到…

【备战秋招】——算法题目训练和总结day4

【备战秋招】——算法题目训练和总结day4&#x1f60e; 前言&#x1f64c;Fibonacci数列我的题解思路分享代码分享 单词搜索我的题解思路分享代码分享 杨辉三角我的题解思路分享代码分享 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢…

SQL 视图

基本概念 视图是一个虚拟表&#xff0c;其内容由查询定义。这个查询可以是对一个或多个表的行和列的选择、连接&#xff08;JOIN&#xff09;、分组&#xff08;GROUP BY&#xff09;和排序&#xff08;ORDER BY&#xff09;等操作的组合。然而&#xff0c;与物理表不同的是&a…

【云原生】AWS云平台,ECR推送Helm chart包

文章目录 1、背景信息2、AWS ECR推送OCI1、背景信息 背景一:OCI 是一个围绕容器格式和运行时的开放治理结构,旨在创建开放的行业标准。OCI 由 Docker、CoreOS 和其他容器技术相关的公司于 2015 年创立,现在由 Linux 基金会托管。OCI 的目标是提供一个中立的论坛,以解决容器…

6、Redis系统-数据结构-01-String

Redis 数据结构简介 前言 Redis 是一个高性能的内存数据库&#xff0c;其关键在于其数据结构的设计。Redis 数据结构是指底层实现 Redis 键值对中值的数据类型的方式。它包括了以下几种主要对象&#xff1a; String&#xff08;字符串&#xff09;对象&#xff1a;最基本的数…

C++杂说- 多态和继承的知识在总结

多态 就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。 构成多态还有两个条件&#xff1a; 1. 必须通过基类的指针或者引用调用虚函数 2. 被调用的函数必须是虚函数&#xff0c;且派生类必须对基类的虚函数进行重写 虚…

每天一个数据分析题(四百十五)- 线性回归模型

线性回归模型中误差项的数学期望为 A. 0 B. 1 C. 2 D. 3 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#xff0c;SQL&#xff0c;统计学&#xff0c;数据分析理论&#xff0c;深度学习&am…

【cocos2dx】【iOS工程】如何保存用户在游戏内的绘画数据,并将数据以图像形式展示在预览界面

【cocos2dx】【iOS工程】如何保存用户在应用内的操作数据&#xff0c;并将数据以图像形式展示在预览界面 设备/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 开发工具&#xff1a;Xcode&#xff08;15.0.1&#xff09; 开发需求&#xff1a;如何保存用户在应用…

GEE代码实例教程详解:降水量分类分析

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 对特定区域内的降水量进行分类分析。通过设定不同的降水量阈值&#xff0c;我们可以将降水量分为干旱、中等和湿润三个类别&#xff0c;并分析这些类别随时间的变化。 背景知识 降水量分类 降水量分类是…

如何连接到公司的服务器?

1.下载FileZilla FileZilla的下载与安装以及简单使用&#xff08;有图解超简单&#xff09;-CSDN博客 2.打开 3.输入主机 用户名 密码 端口 注&#xff1a;主机支持的协议类型&#xff1a; 4.连接成功 其他方式也有很多&#xff0c;比如通过cmd&#xff0c;html网页等等 3个…

桥接模式(大话设计模式)C/C++版本

桥接模式 C #include <iostream> using namespace std;class HandsetSoft // 手机软件 { public:virtual ~HandsetSoft() default;virtual void Run() 0; };class HandsetGame : public HandsetSoft // 手机游戏 { public:void Run() override{cout << "运…

C++:从C语言过渡到C++

在这篇博客中&#xff0c;我将会介绍从C语言过渡到C的一些基础知识。 目录 C起源 C的关键字 输出hello&#xff0c;world ​编辑 命名空间 1.什么是命名空间 2.namespace的作用 3.域作用限定符 4.命名空间的使用 IO流 缺省参数 函数重载 引用 1.引用的定义 2.引…

mongo笔记

概述 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的,是分布式文件存储数据库。 …

L1 Simple_ReAct_Agent

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下为代码的实现。 Basic ReAct Agent(manual action) import openai import re import httpx import os from dotenv import load_dotenv, find_dotenvOPENAI_API_KEY os.getenv(OPEN…

逻辑回归模型(非回归问题,而是解决二分类问题)

目录&#xff1a; 一、Sigmoid激活函数&#xff1a;二、逻辑回归介绍&#xff1a;三、决策边界四、逻辑回归模型训练过程&#xff1a;1.训练目标&#xff1a;2.梯度下降调整参数&#xff1a; 一、Sigmoid激活函数&#xff1a; Sigmoid函数是构建逻辑回归模型的重要激活函数&am…

容联云发布容犀大模型应用,重塑企业“营销服”|WAIC 2024

7月6日&#xff0c;在2024世界人工智能大会上&#xff0c;容联云成功举办主题为“数智聚合 产业向上”的生成式应用与大模型商业化实践论坛。 论坛上&#xff0c;容联云发布了容犀智能大模型应用升级&#xff0c;该系列应用包括容犀Agent Copilot、容犀Knowledge Copilot、容犀…

《C++设计模式》状态模式

文章目录 一、前言二、实现一、UML类图二、实现 一、前言 状态模式理解最基本上的我觉得应该也是够用了&#xff0c;实际用的话&#xff0c;也应该用的是Boost.MSM状态机。 相关代码可以在这里&#xff0c;如有帮助给个star&#xff01;AidenYuanDev/design_patterns_in_mode…

嵌入式Qt开发C++编程基础部分万字总结

嵌入式Qt开发C基础编程 文章目录 嵌入式Qt开发C基础编程1、初识C2、数据类型、运算符和表达式数据类型运算符表达式 3、控制结构1. 条件语句if-elseswitch 2. 循环语句forwhiledo-while 3. 跳转语句breakcontinuegoto&#xff08;不推荐使用&#xff09; 4、数组、指针、引用和…