首页 > 其他分享 >自定义按钮模板

自定义按钮模板

时间:2024-01-21 23:00:29浏览次数:27  
标签:自定义 样式 Background 按钮 模板 属性

自定义按钮模板

本文同时为b站WPF课程的笔记,相关示例代码

对应09上半节课

自定义模板

对于当前的这个样式不满意——想要自己控制它这个控件长什么样子

比如在一节课中,为了实现圆角按钮,我们是从网上面抄了一段代码过来

那么,如何建立一种自带圆角的按钮模板呢?

<Button Width="300" Height="100" Content="自定义按钮" Background="#0078d4" FontSize="50" Foreground="White">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            
        </ControlTemplate>
    </Button.Template>
</Button>

在按钮标签中添加<Button.Template><ControlTemplate TargetType="Button">,会发现,之前本来定义的文字、背景等属性全部都被覆盖了。

此时,我们再在中间添加我们想要的重写的模板样式

比如想要添加圆角的样式,可以写上:

<Button Width="300" Height="100" Content="自定义按钮1" Background="#0078d4" FontSize="50" Foreground="White">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Background="Red" BorderBrush="Black" BorderThickness="5" CornerRadius="10">
                
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

为了继续使用之前定义的部分属性,比如文字、文字的居中对齐等:

<Button Width="300" Height="100" Content="自定义按钮1" Background="#0078d4" FontSize="50" Foreground="White">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Background="Red" BorderBrush="Black" BorderThickness="5" CornerRadius="10">
                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

可能需要点击启动或者重新生成项目才能查看到效果

但是这样定义模板会使得之前的属性全部被覆盖,我们可以设置一些需要继承过来的属性。比如我想要继承之前的背景颜色,可以使用Background="{TemplateBinding Background}"表示模板中的背景色依然使用这个按钮定义的的背景色。

在之后我们可以将 Template 模板放到 style 样式中,用于更方便的搭建具有统一性/差异化的界面样式

总结

给按钮使用模板,会使得按钮本身的所有属性都被覆盖。

在模板中,可以:

  1. 定义某属性,使得使用该模板的所有元素都具有统一的属性
  2. 令某属性继承,例如Background="{TemplateBinding Background}"
  3. 不定义某属性,该属性会为默认值(?比如向左对齐、向上对齐)

可以与Style样式相结合

标签:自定义,样式,Background,按钮,模板,属性
From: https://www.cnblogs.com/Vanilla-chan/p/17978658/Customized-Button-Templates

相关文章

  • 自定义tabbar
    [基础能力/自定义tabBar(qq.com)]1.在app.json中在原来的tabbar配置里面顶部添加 “custom”:true;添加  "usingComponents": {},"tabBar":{"custom":true,"color":"#000","selectedColor":"blue&qu......
  • 自定义排序
    问题:如何对数据进行自定义排序函数解决:=SORTBY(A2:A21,MATCH(A2:A21,E2:E11,))按自定义序列排序:选取数据中任一单元格》数据(或开始)》排序》自定义排序》勾选包含标题》次序》自定义序列》选取》确定》确定设置自定义序列:选取数据》文件》选项》自定义序列》从单元格导......
  • P1886 滑动窗口 /【模板】单调队列
    P1886滑动窗口/【模板】单调队列https://www.luogu.com.cn/problem/P1886 思路https://zhuanlan.zhihu.com/p/346354943 Codehttps://www.luogu.com.cn/record/143623041LLn,k;LLa[1000005];deque<LL>maxd,mind;intmain(){cin>>n>>k;......
  • c++函数模板
    一.模板概念:就是建立通用的摸具,大大提高复用性特点:模板不可以直接使用,它只是一个框架模板的通用并不是万能的c++提供两种模板机制函数模板和类模板二.函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表作用:建立一个通用函数......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:falsetoc:true#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:templ......
  • 死磕Spring之IoC篇 - 解析自定义标签(XML 文件)
    解析自定义标签(XML文件)上一篇《BeanDefinition的解析阶段(XML文件)》文章分析了Spring处理 org.w3c.dom.Document 对象(XMLDocument)的过程,会解析里面的元素。默认命名空间(为空或者 http://www.springframework.org/schema/beans)的元素,例如 <bean/> 标签会被解析成Generic......
  • 算法模板 v1.3.1.20240120
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • Avalonia TemplatedControl (模板控件)
    在ava中的模板控件相当于wpf中的自定义控件在下面示例中,将绘制一个文本框和一个按钮,用来组合一个搜索控件在app.axaml中加入样式<Application.Styles><FluentTheme/><StyleIncludeSource="/TemplatedControl1.axaml"/></Application.Styles>引入并使用xmlns......
  • Radio单选按钮组
    Radio单选按钮组classRadioPageextendsStatefulWidget{constRadioPage({super.key});@overrideState<RadioPage>createState()=>_RadioPageState();}class_RadioPageStateextendsState<RadioPage>{intsex=1;_radioChange(value)......
  • iReport使用zxing二维码模板设置方式
    1.首先需要给软件配置引用包core和javase;工具-选项-iReport-ClassPath, 2.然后组件就直接使用Image的,选文件时直接取消就行;3.重点:设置属性ImageExpression:com.google.zxing.client.j2se.MatrixToImageWriter.toBufferedImage(newcom.google.zxing.qrcode.QRCodeWriter(......