WPF 为button动态设置不同的模板

news2024/11/25 11:24:18

有时候需要动态的设置一些按钮的状态模板。使一个button显示不同的内容,比如Button未点击安装显示:

安装后显示:

可以通过设置button的content,通过content来设置不同的模板来实现功能,以下是代码:

MainWindow.xaml

<Window
    x:Class="WPF_ButtonTemplate.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WPF_ButtonTemplate"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Window.Resources>
        <BitmapImage x:Key="Setting_Extension" UriSource="pack://application:,,,/Installed.png" />

        <ControlTemplate x:Key="UnInstallTemplate" TargetType="Button">
            <Border
                x:Name="border1"
                Width="100"
                Height="30"
                Background="LightGray"
                BorderBrush="DarkGray"
                BorderThickness="1.5"
                CornerRadius="8">
                <TextBlock
                    x:Name="contentTB"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Text="{TemplateBinding Content}" />
            </Border>
        </ControlTemplate>

        <ControlTemplate x:Key="InstalledTemplate" TargetType="Button">
            <Border x:Name="border1" Background="LightYellow" CornerRadius="8">
                <StackPanel Margin="13,7,13,7" Orientation="Horizontal">
                    <Image
                        Width="16"
                        Height="16"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        Source="{DynamicResource Setting_Extension}" />
                    <TextBlock
                        x:Name="contentTB"
                        Margin="4,0,0,0"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        FontSize="{TemplateBinding FontSize}"
                        Foreground="{TemplateBinding Foreground}"
                        Text="{TemplateBinding Content}" />
                </StackPanel>
            </Border>
        </ControlTemplate>

        <Style x:Key="NomalBtn" TargetType="Button">
            <Setter Property="Width" Value="100" />
            <Setter Property="Height" Value="30" />
            <Style.Triggers>
                <Trigger Property="Content" Value="未安装">
                    <Setter Property="Template" Value="{StaticResource UnInstallTemplate}" />
                </Trigger>
                <Trigger Property="Content" Value="已安装">
                    <Setter Property="Template" Value="{StaticResource InstalledTemplate}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button
            x:Name="btn"
            Click="Button_Click"
            Content="未安装"
            Style="{StaticResource NomalBtn}" />
    </Grid>
</Window>

MainWindow.cs

using System.Windows;


namespace WPF_ButtonTemplate
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (string.Equals(btn.Content, "未安装"))
                btn.Content = "已安装";
            else
                btn.Content = "未安装";
        }
    }
}

项目免费下载地址:

【免费】WPF-ButtonTemplate资源-CSDN文库

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

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

相关文章

【消息队列】Kafka从入门到面试学习总结

国科大学习生活&#xff08;期末复习资料、课程大作业解析、大厂实习经验心得等&#xff09;: 文章专栏&#xff08;点击跳转&#xff09; 大数据开发学习文档&#xff08;分布式文件系统的实现&#xff0c;大数据生态圈学习文档等&#xff09;: 文章专栏&#xff08;点击跳转&…

CentOS7安装Gitlab服务

文章目录 前言一、安装依赖二、安装gitlab1、上传安装2、修改配置 三、启动gitlab服务四、修改密码五、设置为中文&#xff08;低版本有问题&#xff09;六、常用命令 前言 文中gitlab版本为&#xff1a; gitlab-ce-14.2.7 一、安装依赖 gitlab需要安装如下依赖&#xff0c;否…

Linux编辑器-vim的配置及其使用

vim是一种多模式的编辑器&#xff1a; 1.命令模式&#xff08;默认模式&#xff09;&#xff1a;用户所有的输入都会当作命令&#xff0c;不会当作文本输入。 2.插入模式&#xff1a;写代码&#xff0c; 按「 i 」切换进入插入模式「 insert mode 」&#xff0c;按 “i” 进入…

2024/10/13周报

文章目录 摘要Abstract文献阅读题目1. 背景与问题提出2. 提出的CLATT方法2.1 卷积神经网络&#xff08;CNN&#xff09;2.2 长短期记忆网络&#xff08;LSTM&#xff09;2.3 注意力机制2.4 滑动窗口方法 3. 实验设计与结果3.1 数据集3.2 实验基线与评价指标3.3 实验结果与分析 …

使用清华大学开源软件镜像站下载JDK

在软件开发和日常使用中&#xff0c;Java Development Kit&#xff08;JDK&#xff09;是不可或缺的一部分。它提供了Java运行环境和开发工具&#xff0c;使得开发者可以编写、编译和运行Java应用程序。本文将指导你如何从清华大学开源软件镜像站&#xff08;TUNA&#xff09;下…

通信工程学习:什么是UART通用异步收发器

UART&#xff1a;通用异步收发器 UART&#xff0c;全称Universal Asynchronous Receiver/Transmitter&#xff0c;即通用异步收发传输器&#xff0c;是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。以下是关于UART的详细介绍&#xff1a; 一、定义与特点 定义&…

数据分析:R语言计算XGBoost二分类模型的SHAP值

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍SHAP用途计算方法:应用加载R包导入数据建模平均SHAP值计算单个样本的每个特征的SHAP值蜜蜂图依赖图单个样本的SHAP解释(Force Plot)其他方法计算SHAP值单个个体预测结果系统信息…

MLM之Llama-3:Llama 3.2的简介、安装和使用方法、案例应用之详细攻略

MLM之Llama-3&#xff1a;Llama 3.2的简介、安装和使用方法、案例应用之详细攻略 目录 Llama 3.2 简介 1、Llama 3.2 的特点 2、模型评估 轻量级指令调优基准 视觉指令调整基准 Llama 3.2 的安装和使用方法 1、下载模型 2. 开发环境准备 3. 使用模型进行推理和微调 4…

Ubuntu命令行快速部署C++语言的GDAL库

本文介绍在Linux系统的Ubuntu电脑中&#xff0c;在命令行中一句代码快速配置C 环境下的gdal库的方法。 在文章Ubuntu基于Docker快速配置GDAL的Python、C环境&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/133433838&#xff09;中&#xff0c;我们就介…

【JVM】内存模型

文章目录 内存模型的基本概念案例 程序计数器栈Java虚拟机栈局部变量表栈帧中局部变量表的实际状态栈帧中存放的数据有哪些 操作数栈帧数据 本地方法栈 堆堆空间是如何进行管理的? 方法区静态变量存储 直接内存直接内存的作用 内存模型的基本概念 在前面的学习中,我们知道了字…

施磊C++ | 进阶学习笔记 | 3.绑定器和函数对象、lambda表达式

三、绑定器和函数对象、lambda表达式 文章目录 三、绑定器和函数对象、lambda表达式3.1模板的完全特例化和非完全&#xff08;部分&#xff09;特例化1.完全特例化和非完全&#xff08;部分&#xff09;特例化2.模板的实参推演 3.2 C STL中的绑定器bind1stbind2nd自己实现一个b…

深度学习——线性神经网络(三、线性回归的简洁实现)

目录 3.1 生成数据集3.2 读取数据集3.3 定义模型3.4 初始化模型参数3.5 定义损失函数3.6 定义优化算法3.7 训练 在上一节中&#xff0c;我们通过张量来自定义式地进行数据存储和线性代数运算&#xff0c;并通过自动微分来计算梯度。实际上&#xff0c;由于数据迭代器、损失函数…

基于深度学习的西红柿成熟度检测系统

简介&#xff1a; 基于深度学习技术的西红柿成熟度检测系统是一种利用人工智能算法对西红柿成熟程度进行自动识别和分类的智能系统。该系统通过采集西红柿的图像数据&#xff0c;运用深度学习模型对图像中的西红柿进行特征提取和分析&#xff0c;从而实现对西红柿成熟度的准确判…

【C】printf()与scanf()详介以及如何在VS中使用scanf(保姆级详细版)

printf() 基本用法 printf()的作用是将参数文本输出到屏幕,它名字里面的f 代表 format(格式化)&#xff0c;表示可以定制输出文本的格式。 1 #include <stdio.h>//standard input output标准输入输出操作 2 int main() 3{ 4 printf("Hello World"); 5 retu…

DVWA CSRF 漏洞实践报告

1. 漏洞简介 CSRF&#xff08;跨站请求伪造&#xff09;是一种攻击&#xff0c;使得攻击者能够以受害者的身份执行非预期的操作。在靶场DVWA中&#xff0c;我将尝试通过CSRF漏洞更改管理员密码。 2. 实验环境 DVWA版本&#xff1a;DVWA-old浏览器&#xff1a;火狐默认管理员账…

QtModel

QModelIndex index1 model->index(row,column,QModelIndex());QModelIndex index2 model->index(row.column,index2); QSqlQuery::size() 仅在使用了 QSqlQuery::exec() 后并且查询结果集的所有行都被读取时才有效。如果结果集很大或在使用游标的情况下&#xff0c;返回…

Linux 内核态,用户态,以及如何从内核态到用户态,交互方式有哪些

一、Linux 内核态&#xff0c;用户态 Linux 内核态&#xff0c;用户态&#xff0c;以及如何从内核态到用户态&#xff0c;我来说下我的理解 很多面试官&#xff0c;面试也是照搬照套&#xff0c;网上找的八股文面试题&#xff0c;面试的人也是背八股文&#xff0c;刚好背到了&…

全面讲解C++

数据类型 1.1 基本数据类型 1.1.1 整型&#xff08;Integer Types&#xff09; 整型用于表示整数值&#xff0c;分为以下几种类型&#xff1a; int&#xff1a;标准整数类型&#xff0c;通常为4字节&#xff08;32位&#xff09;。short&#xff1a;短整型&#xff0c;通常…

被装物联网系统|DW-S305系统是一套成熟系统

东识被装仓库管理系统&#xff08;智被装DW-S305&#xff09;作业管理软件系统包括收发管理、库房管理、库存统计、环境监测、预警管理、数据展示、系统管理等功能&#xff0c;主要功能如下&#xff1a; 收发管理&#xff1a;对库房收发物资进行管理&#xff0c;支持收发物单据…

通信工程学习:什么是TCP/IP(传输控制协议/互联网议)

TCP/IP&#xff1a;传输控制协议/互联网议 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/互联网协议&#xff09;是互联网的基本协议&#xff0c;也是国际互联网络的基础。它不仅仅是一个协议&#xff0c;而是一个协议族&#…