Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#-改变控件样式

C#-改变控件样式

作者头像
kdyonly
发布于 2023-03-03 11:36:25
发布于 2023-03-03 11:36:25
1.1K00
代码可运行
举报
文章被收录于专栏:个人编程笔记个人编程笔记
运行总次数:0
代码可运行

浏览量 5

目前接触到的C#应用程序,基本上采用了WPF进行界面设计,WPF是啥?是微软推出的基于Windows 的用户界面框架,利用它能够将界面设计和逻辑代码完全分离,而且能够实现很炫的画面效果,当然前提是你对它的使用较为熟悉,笔者目前也是在学习关于界面样式这方面的内容。

标签内样式

首先,我们新建一个WPF应用程序,建成之后我们可以看到主窗口的设计界面,然后我们根据自己想要的界面,进行制作,这里就使用button进行测试了。添加button按钮,点击鼠标右键,选择属性,或者按F4呼出属性界面设置窗口。对属性熟悉的可以直接修改xaml文件即可。我们设置了按钮的大小,以及颜色,这应该难不倒你,接着继续换一种方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85" Background="#FFE99A9A" />
    </Grid>
</Window>

使用Style

利用Style对元素进行样式设置,它就类似css可以设置html标签的样式。假如你想把按钮设置成相同的样式,你使用Style就能轻松的实现,当然,如果你想其中一个不一样也是可以的,下面用代码介绍它的使用。 这里放置了3个按钮,并用Style设置了他们的背景色,边框,透明度三个属性。 TargetType=”Button” 这样样式就会作用于所有的button了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="Button">
            <Setter Property="Background" Value="red"></Setter>
            <Setter Property="BorderBrush" Value="black"></Setter>
            <Setter Property="Opacity" Value="0.5"></Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85"  />
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="211,27,0,0" Name="button2" VerticalAlignment="Top" Width="85" />
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="384,27,0,0" Name="button3" VerticalAlignment="Top" Width="85" />
    </Grid>
</Window>

如何让它作用于其中一个呢?需要在样式上提供x:key,然后,将样式应用到标签上Style=”{StaticResource 你的key值}” ,这样你就能单独设置其样式了,是不是跟css通过id和class进行设置一样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="Button">
            <Setter Property="Background" Value="red"></Setter>
            <Setter Property="BorderBrush" Value="black"></Setter>
            <Setter Property="Opacity" Value="0.5"></Setter>
        </Style>

        <Style x:Key="btnone" TargetType="Button">
            <Setter Property="Background" Value="yellow"></Setter>
            <Setter Property="Content" Value="btnone"></Setter>
            <Setter Property="Opacity" Value="1"></Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Style="{StaticResource btnone}" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85"  />
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="211,27,0,0" Name="button2" VerticalAlignment="Top" Width="85" />
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="384,27,0,0" Name="button3" VerticalAlignment="Top" Width="85" />
    </Grid>
</Window>

使用模板

关于模板,我们比较常用的就是控件模板(ControlTemplate)和数据模板(DataTemplate)了。通过模板你可以改变控件的结构和外观。单独使用ControlTemplate必须制定key值,你可以使用style加模板的方式,就不是必要了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ControlTemplate x:Key="btnone" TargetType="Button">
            <Border Background="red" BorderThickness="1">
                <Grid Margin="1" Background="AliceBlue">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="4,5,4,4" />
                </Grid>
            </Border>
        </ControlTemplate>
    </Window.Resources>
    <Grid>
        <Button Template="{StaticResource btnone}" Content="Button" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85"  />
    </Grid>
</Window>

根据控件状态改变样式

这里介绍两种方式,一种是通过触发器(Triggers)来进行改变,另一种使用visualstate对象改变控件的样式,.net4.0开始引入VisualStateManager,主要为了控制控件的状态转换,和其间涉及的外观行为。,所要要使用这个必须将项目换成.net4.0框架。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//鼠标移动上去,改变字体大小
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Trigger.Setters>
                        <Setter Property="FontSize" Value="22" />
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Content="Button" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85"  />
    </Grid>
</Window>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//鼠标移动上去改变边框颜色
<Window x:Class="teststyle.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ControlTemplate x:Key="btnone" TargetType="Button">
            <Border>
                <Border.Background>
                    <SolidColorBrush x:Name="BorderBrush" Color="Black"/>
                </Border.Background>
                <Grid Background="{TemplateBinding Background}" Margin="4">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="2" />
                </Grid>
                <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                <ColorAnimation Storyboard.TargetName="BorderBrush" Storyboard.TargetProperty="Color" To="Red" />
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
            </Border>
        </ControlTemplate>
    </Window.Resources>

    <Grid>
        <Button Template="{StaticResource btnone}" Content="Button" Height="37" HorizontalAlignment="Left" Margin="34,26,0,0" Name="button1" VerticalAlignment="Top" Width="85"  />
    </Grid>
</Window>

参考资料

样式设置和模板化 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/controls/styling-and-templating

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WPF基础入门--样式的继承及使用
然后我们定义两个继承自它的样式,分别为对应按钮baseButtonStyle1和baseButtonStyle2的样式:
zls365
2021/01/28
1.1K0
WPF 如何修改button圆角(经典)
2. 设置border的时候,必须要设置background, 否则会提示content 被多次使用。
zls365
2021/02/26
3.6K0
[WPF] WPF做的漂亮的登陆界面[附源码]
登陆界面上的logo都是从网上找的,请大家替换成自己公司的logo即可。。。。。 WPF界面库,非常漂亮的WPF界面【附源码】 https://www.itsvse.com/thread-4941-1-1.html WPF登陆界面美化: 1:账号和密码框都做了美化, 2:关闭按钮和登陆按钮都做了美化,当鼠标移动上去,都做了处理, 3:总体界面四个边角是圆弧形,挺好看的。。。。 代码如下,源码会在帖子下方:
zls365
2020/08/19
6.2K0
[WPF] WPF做的漂亮的登陆界面[附源码]
【NEW】WPF MVVM 模式下自写自用的窗口样式
SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。
Shunnet
2022/09/01
2.4K0
【NEW】WPF MVVM 模式下自写自用的窗口样式
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
MVVM其实就是:Model 、View、ViewModel三个的简称,就像MVC一样。 Model就是模型。View就是视图。ViewModel就是和view进行绑定的。
Shunnet
2022/05/31
6.1K0
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦)。它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作。
zls365
2021/01/28
3.5K0
WPF桌面端开发-数据绑定(Binding)
此模式允许将给定的 ControlTemplate 属性绑定到应用 ControlTemplate 的控件的属性。为了更好地理解这里的问题,下面是一个示例
码客说
2023/07/11
3440
《深入浅出WPF》——模板学习
图形用户界面(GUI,Graphic User Interface)应用较之控制台界面(CUI,Command User Interface)应用程序最大的好处就是界面友好、数据显示直观。CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本、列表、图形等多种形式立体显示。 用户体验在GUI程序设计中起着举足轻重的作用——用户界面设计成什么样子看上去才够漂亮?控件如何安排才简单易用并且少犯错误?(控件并不是越复杂越好)这些都是设计师需要考虑的问题。WPF系统不但支持传统Windows Forms(简称WinForm)编程的用户界面和用户体验设计,更支持使用专门的设计工具Microsoft Expression Blend进行专业设计,同时还推出了以模板为核心的新一代设计理念(这是2010年左右的书,在那时是新理念,放现在较传统.NET开发也还行,不属于落后的技术)。 本章我们就一同来领略WPF强大的模板功能的风采。
全栈程序员站长
2022/09/09
5.1K0
《深入浅出WPF》——模板学习
WPF MVVM 模式下自写自用的窗口样式
废话我也就不多说,直接上菜(由于公司电脑做了加密,无法把代码压缩发布,只能以这种方式来分享)
Shunnet
2022/09/01
1.7K0
WPF MVVM 模式下自写自用的窗口样式
WPF 水印装饰器
注意:如果窗体或控件使用了ControlTemplate,因为ControlTemplate不包含AdornerDecorator,所以需要在ControlTemplate中添加AdornerDecorator。
沙漠尽头的狼
2021/12/01
4900
WPF 水印装饰器
WPF之TreeList的实现方法(一)
做项目的时候根据需求,WPF现有的控件不能完全满足我们的需求, 很多时候我们需要对现有的控件做一下加工。 最简单的我们可能会把Tree转换成List形式有的叫Grid形式就像下图一样 今天我先做一个完
lpxxn
2018/01/31
2.1K0
WPF之TreeList的实现方法(一)
【愚公系列】2022年10月 基于WPF的智能制造MES系统框架-菜单栏的设计
MES系统为企业提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等管理模块,为企业打造一个扎实、可靠、全面、可行的制造协同管理平台。
愚公搬代码
2022/10/28
7600
【愚公系列】2023年04月 WPF运动控制平台-003.运动控制平台的UI设计
---- 一、运动控制平台的UI设计 1.代码 <Window x:Class="MotionPlatform.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/expr
愚公搬代码
2023/04/16
5010
【愚公系列】2023年04月 WPF运动控制平台-003.运动控制平台的UI设计
Drawer 抽屉控件的实现
定义了一个名为 Drawer 的自定义控件,继承自 HeaderedContentControl,允许用户在应用程序中创建可展开和收起的抽屉。抽屉的显示和隐藏动画通过 Storyboard 实现,支持从不同方向(左、上、右、下)展开和收起。
郑子铭
2024/12/09
1160
Drawer 抽屉控件的实现
【愚公系列】2023年04月 WPF运动控制平台-005.运动平台之功能实现(完结)
---- 一、运动平台之功能实现 1.位置计算 物理可用距离 (40000), 取料位:19945P, 打包位:-19360P 像素位置:取料位:20px 打包位:1020px 把脉冲转换位距离 步进驱动器设置细分 8 步进电机步进角 1.8° 导程:8mm 计算步进电机走1cm需要的脉冲数 360 / 1.8 = 200个脉冲转一圈 200 * 8 = 1600个脉冲转一圈(细分情况) 1600 / 8 = 200 (步进电机走1mm需要) 故:走1cm需要脉冲
愚公搬代码
2023/04/28
4600
【愚公系列】2023年04月 WPF运动控制平台-005.运动平台之功能实现(完结)
Silverlight button 图片切换样式
之前一直做WPF现在开始接触Slilverlight感触很多。 今天做一个Button要求 有两个图片,button默认有一个图片,鼠标over时用另一个图片, 用wpf做的时候写一个template很简单,但silverlight和wpf写起来不一样 记录一下。大概思路是两个image鼠标MouseOver的时候一个Visible一个Collapsed 写的是一个自定义控件,代码和皮肤分离,很简单的一个demo 代码下载:ImageButtonTest.rar 先写一个继承自button的imagebut
lpxxn
2018/01/31
2.2K0
wpf 自定义窗体 干货 干货
首先效果图如下: 步骤: 新建一个资源文件WindowsStyles.xaml 修改内容如下 : <ResourceDictionary xmlns="http://schemas.micr
zls365
2021/04/02
4980
WPF 应用完全模拟 UWP 的标题栏按钮
发布于 2018-08-04 09:35 更新于 2018-08-05 02:21
walterlv
2018/09/18
2.3K0
WPF 应用完全模拟 UWP 的标题栏按钮
X--名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的、用来引导XAML代码将XAML代码编译为CLR代码。
莫问今朝
2018/08/31
1.5K0
X--名称空间详解
WPF实现列表分页控件的示例代码分享
[TemplatePart(Name = CountPerPageTextBoxTemplateName, Type = typeof(TextBox))]
用户7718188
2022/11/06
1.4K0
相关推荐
WPF基础入门--样式的继承及使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验