【C# WPF】Style全局样式和资源字典

1.全局样式:

在Window.Resource中声明一个样式,总体为白色,为了更有区分度,采用BasedOn这一继承方式来在保留字体和边缘设置的基础上,更改颜色。

xml 复制代码
<Window x:Class="WpfApp1.Window1"
        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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="Day2" Height="450" Width="800">

    <Window.Resources>
        <Style TargetType="Button">
            <Setter Property="Background" Value="White"/>
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="Margin" Value="10"/>
        </Style>

        <Style x:Key="LoginStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Background" Value="Red"/>
        </Style>
        <Style x:Key="QuitStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Background" Value="Pink"/>
        </Style>

    </Window.Resources>
    
    <StackPanel>
        <Button Content="登录" Style="{StaticResource LoginStyle}"/>
        <Button Content="退出" Style="{StaticResource QuitStyle}"/>
    </StackPanel>
        
</Window>

窗体结构:

2.资源字典

第一种方法,仅能将样式应用在本窗体中,不符合封装、多用的思想。

所以要将Style资源样式分离出来,静态调用。

在项目上,右击添加--资源字典,在资源字典中添加Style类型:

xml 复制代码
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style TargetType="Button">
        <Setter Property="Background" Value="White"/>
        <Setter Property="FontSize" Value="20"/>
        <Setter Property="Margin" Value="10"/>
    </Style>

    <Style x:Key="LoginStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
        <Setter Property="Background" Value="Red"/>
    </Style>
    <Style x:Key="QuitStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
        <Setter Property="Background" Value="Pink"/>
    </Style>
    
</ResourceDictionary>

这样就将资源样式添加到了资源字典中。

下面是如何调用这些写好的样式,找到App.xaml,在<Application.Resources>中添加:

xml 复制代码
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="WpfApp1;component/BaseButtonStyle.xaml">
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

这样就被全局包含了。

测试一下,跟之前是一样的,并且在其他Window中也能调用。

第一个窗口:

xml 复制代码
    <StackPanel>
        <Button Content="登录" Style="{StaticResource LoginStyle}"/>
        <Button Content="退出" Style="{StaticResource QuitStyle}"/>
    </StackPanel>

其他新建窗口:

xml 复制代码
    <Grid>
        <Button Style="{StaticResource LoginStyle}"/>
    </Grid>
相关推荐
学java的小菜鸟啊7 分钟前
第五章 网络编程 TCP/UDP/Socket
java·开发语言·网络·数据结构·网络协议·tcp/ip·udp
云草桑7 分钟前
逆向工程 反编译 C# net core
前端·c#·反编译·逆向工程
立黄昏粥可温12 分钟前
Python 从入门到实战22(类的定义、使用)
开发语言·python
PerfMan15 分钟前
基于eBPF的procstat软件追踪程序垃圾回收(GC)事件
linux·开发语言·gc·ebpf·垃圾回收·procstat
聆听HJ23 分钟前
java 解析excel
java·开发语言·excel
溪午闻璐26 分钟前
C++ 文件操作
开发语言·c++
环能jvav大师35 分钟前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
吱吱鼠叔38 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
Antonio91543 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov1 小时前
C++中move和forword的区别
开发语言·c++