吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1944|回复: 11
收起左侧

[其他原创] WPF中的“资源”

  [复制链接]
Naylor 发表于 2022-12-12 17:28
本帖最后由 Naylor 于 2022-12-12 17:30 编辑

WPF中的“资源”

资源概述

WPF中的资源的概念有点类似 web 技术中的静态资源的概念。可以是一个样式,也可以是一个button的边框设置集合。
可以简单的将资源分为如下几个类别:

  • 窗体资源:顾名思义,仅可在当前窗体中使用
  • 全局资源:相对于窗体资源而言,是一个全局级别的,可以被多个窗体引用,可以根据不同的维度定义多个全局资源文件
  • 动态资源:“值”可以被改变的资源,例如:程序启动的时候button的边框是红色的,当点击某个其他按钮后,将边框变成蓝色

    窗体资源

    创建

    <Window.Resources>
        <SolidColorBrush x:Key="SolidColor"  Color="Red">
        </SolidColorBrush>
    </Window.Resources>

    引用

    使用花括号和关键字 StaticResource

    <StackPanel>
        <Button Content="我是一个按钮" Margin="10"  BorderBrush="{StaticResource  SolidColor}"></Button>
    </StackPanel>

    全局资源

    创建 资源字典 文件

    右键工程,点击添加-资源字典,命名为  DictionaryButton.xaml

    编写全局资源

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="GlobalSolidColor" Color="Yellow"></SolidColorBrush>
    <Style x:Key="DefaultButtonStyle" TargetType="Button">
        <Setter   Property="Foreground"  Value="Blue"  ></Setter>
        <Setter   Property="FontSize"  Value="20"  ></Setter>
        <Setter  Property="BorderBrush" Value="Pink" ></Setter>
        <Setter   Property="BorderThickness"  Value="10"  ></Setter>
    </Style>
    </ResourceDictionary>

    引入

    在 App.xaml 文件中引入全局资源文件 DictionaryButton.xaml

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="DictionaryButton.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

    引用

    <StackPanel>
        <Button Content="我是一个按钮" Margin="10"   Style="{StaticResource DefaultButtonStyle}"></Button>
    </StackPanel>

    动态资源

    就资源本身而言,动态资源并没有什么特殊之处,仅仅是在处理方式上面的差异。

创建

参考 窗体资源

引用

                <StackPanel>
                    <Button Content="改变下面控件的边框颜色" Margin="10"  Click="Button_Click" ></Button>
                    <Button Content="我是一个按钮" Margin="10"  BorderBrush="{DynamicResource  SolidColor}" BorderThickness="10"></Button>
                </StackPanel>

动态编辑资源

   private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Resources["SolidColor"] = new SolidColorBrush(Colors.Blue);
        }

代码

https://github.com/Naylor55/WPF-Taste/tree/main/resource/ResourceTaste

免费评分

参与人数 4吾爱币 +8 热心值 +4 收起 理由
Nicholasc0 + 1 + 1 用心讨论,共获提升!
sdr123 + 1 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
家里有个肉团纸 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Naylor 发表于 2023-4-3 09:31
wincao 发表于 2023-3-30 18:16
能写代码出来吗?谢谢

[C#] 纯文本查看 复制代码
<Window x:Class="RambleWPF.资源2"
        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:RambleWPF"
        mc:Ignorable="d"
        Title="资源2" Height="450" Width="800">
    <Window.Resources>

        <Style x:Key="borStyle" TargetType="Border">
            <Setter Property="BorderThickness" Value="20"></Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Border Width="300" BorderBrush="Pink" Height="400" Style="{StaticResource borStyle}"></Border>
    </Grid>
</Window>





wincao 发表于 2023-3-28 11:38
请问有什么方便的办法,确定“ <SolidColorBrush x:Key="SolidColor"  Color="Red" />”这些关键词?

比如说,我想将BorderThickness=“10”改写为窗体资源。
创建:<Border x:Key="BorderThick" BorderThickness="10" />
引用:BorderThickness=  "{StaticResource =BorderThick}"

错误:        XDG-0001        资源“BorderThick”具有不兼容的类型。       
家里有个肉团纸 发表于 2022-12-12 20:45
17601278886 发表于 2022-12-12 21:00
看完了,觉得受益匪浅
ming11421 发表于 2022-12-12 22:15
学习中!果然有用!
WrmQ 发表于 2023-3-28 12:41
对小白果然有用!
 楼主| Naylor 发表于 2023-3-30 17:59
wincao 发表于 2023-3-28 11:38
请问有什么方便的办法,确定“ ”这些关键词?

比如说,我想将BorderThickness=“10”改写为窗体资源。
...

你可以将BorderThickness  定义为一个“资源”  , 然后引用此资源;或者你可以写一个style , 然后再引用这个style
wincao 发表于 2023-3-30 18:16
Naylor 发表于 2023-3-30 17:59
你可以将BorderThickness  定义为一个“资源”  , 然后引用此资源;或者你可以写一个style , 然后再引 ...

能写代码出来吗?谢谢
 楼主| Naylor 发表于 2023-4-3 09:32
wincao 发表于 2023-3-30 18:16
能写代码出来吗?谢谢

欢迎你的评论, 代码示例在下面,希望可以帮到你
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表