【WPF】02 按钮控件圆角配置及状态切换

ops/2024/9/25 18:44:47/

在这里插入图片描述

按钮圆角

先从工具箱里拖进来一个Button控件,然后对这个按钮进行美化。

首先在 xaml 里按钮控件部分 添加如下代码:

<Button x:Name="btnLogin" Content="登录" HorizontalAlignment="Center" Margin="0,399,0,0" VerticalAlignment="Top" Background="#FF696565" Foreground="White" Width="200" Height="32" Grid.Column="1" Click="btnLogin_Click" FontSize="16"><Button.Resources><Style TargetType="{x:Type Border}"><Setter Property="CornerRadius" Value="4"/><Setter Property="BorderBrush" Value="#c1d0dc"/></Style></Button.Resources>
</Button>

这里引入了按钮的资源 Button.Resources,在这里设置按钮的类型及边框的颜色等,圆角的大小可以修改 这里的值即可。
实现效果如下:

在这里插入图片描述

状态切换

在有圆角的情况下,再进行按钮的状态切换就比较麻烦了,WPF不想C# 的winform窗体控件那样,直接通过修改Enable属性即可,WPF中使用到的是IsEnable属性来控制,如果不在前面做好资源配置,这个属性控制将会出问题,切换效果无法实现。

IsEnabled属性

IsEnabled属性是一个布尔值(Boolean),它决定了按钮控件是否处于启用状态。当IsEnabled设置为true时,按钮是可交互的,用户可以点击它,并且如果按钮有与之关联的事件处理器(如点击事件),那么这些事件处理器将被触发。相反,当IsEnabled设置为false时,按钮将变得不可交互,用户无法点击它,并且与之关联的任何事件处理器都不会被触发。

本次要实现的切换是 通过触发将此按钮底色变灰不可操作,再触发将其变蓝可以操作,同时将文本信息修改掉。

这里先要在xmal中添加如下代码段用于调整背景色和前景色:

<Window.Resources><Style x:Key="CustomButtonStyle" TargetType="Button"><Setter Property="Background" Value="LightBlue"/><!-- 默认背景色 --><Setter Property="Foreground" Value="Gray"/><!-- 默认前景色(文本颜色) --><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border Background="{TemplateBinding Background}"  BorderBrush="Gray"  BorderThickness="1"  CornerRadius="3"><ContentPresenter HorizontalAlignment="Center"  VerticalAlignment="Center"/></Border><ControlTemplate.Triggers><Trigger Property="IsEnabled" Value="False"><Setter Property="Background" Value="Gray"/><!-- 禁用时的背景色 --><Setter Property="Foreground" Value="LightGray"/><!-- 禁用时的前景色(可选) --></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>
</Window.Resources>

在CSharp中的代码实现如下:

private void btn1_Click(object sender, RoutedEventArgs e)
{this.btnSelect.Content = "变灰不可用";this.btnSelect.IsEnabled = false;this.btnSelect.Background = new SolidColorBrush(Colors.Gray);
}private void btn2_Click(object sender, RoutedEventArgs e)
{this.btnSelect.Content = "变蓝可用";this.btnSelect.IsEnabled = true;this.btnSelect.Background = new SolidColorBrush(Colors.Blue);
}

实现效果如下:
在这里插入图片描述
在这里插入图片描述
这样操作的目的就是为了保证圆角效果的同时,在按钮状态变化的时候可以能完美切换。

好了,下一篇将讲述如何动态添加控件,一种比较复杂的添加效果。


http://www.ppmy.cn/ops/115898.html

相关文章

LeetCode 22. 括号生成

LeetCode 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&…

使用源代码编译R包的过程

R包的安装方式可以归纳为 源代码安装 和 二进制文件安装 两类&#xff1a; 源代码安装 是指从包的源代码进行编译安装。包括&#xff1a;① 通过CRAN安装源代码版本的包&#xff08;如果没有二进制版本&#xff0c;或者指定了安装源代码&#xff09;。② 从GitHub、Bioconducto…

Nacos 安全使用最佳实践 - 访问控制实践

Nacos不开启鉴权&暴露公网会导致风险 Nacos属于内网核心组件不建议暴露公网&#xff0c;在暴露公网情况下&#xff0c;如果不开启Nacos的鉴权能力&#xff08;访问控制&#xff09;或者 开启鉴权但使用默认密钥&#xff08;密码/token.secret.key/server.identity&#xf…

专业版【命令行下载离线安装包及依赖】

UOS统信专业版命令行下载应用商店应用软件的离线安装包及依赖的相关信息。 文章目录 应用场景一、解决方案1.首先需要确认待下载应用的软件包名称。打开应用商店&#xff0c;找到想下载的应用&#xff0c;这里以【企业微信】为例&#xff1a;2.点击应用版本右侧切换按钮&#x…

分享一波初中级测试面试题

在公司中测试的流程是什么 在公司中进行测试的流程可能因公司的规模、行业、开发流程和项目类型等因素而有所不同。以下是一个一般性的测试流程&#xff1a; 1.需求分析&#xff1a;测试人员需要理解产品或项目的需求&#xff0c;以便确定要测试的范围和测试计划。 2.测试计…

uniApp 中调用安卓原生接口获取位置信息(跳过key请求限制)

一、配置 UniApp 项目 在项目的manifest.json文件中&#xff0c;配置定位权限&#xff1a; 在“App 模块配置”中找到“Maps&#xff08;地图&#xff09;”模块&#xff0c;勾选“定位&#xff08;获取当前位置&#xff09;”权限。 二、使用 UniApp 的原生插件 原生插件开…

iOS 项目中的多主题颜色设计与实现

引言 在现代iOS应用中&#xff0c;用户对个性化体验的需求越来越高&#xff0c;除了功能上的满足&#xff0c;多样的视觉风格也是提升用户体验的重要手段之一。提供多主题颜色的切换功能不仅能满足用户的审美偏好&#xff0c;还可以让应用更具活力&#xff0c;适应不同场景下的…

执行 npm报错 Cannot find module ‘../lib/cli.js‘

报错 /usr/local/node/node-v18.20.4-linux-x64/bin/npm node:internal/modules/cjs/loader:1143 throw err; ^ Error: Cannot find module ../lib/cli.js Require stack: - /usr/local/node/node-v18.20.4-linux-x64/bin/npm at Module._resolveFilename (node:inter…