Wpf 之Generic.xaml

embedded/2025/2/27 5:46:31/

        在 WPF 中,Generic.xaml 是一个特殊的资源文件,它会被自动加载,不需要显式添加。这是 WPF 的命名约定。当 WPF 初始化自定义控件时,它会专门查找这个名字的文件。
这个名字是硬编码在 WPF 框架中的,不能改变。

Generic.xaml 是 WPF 自定义控件的默认样式位置,只要满足以下条件就会自动加载:

  • 文件名必须是 Generic.xaml
  • 文件必须在 Themes 文件夹下
  • 控件必须正确设置 DefaultStyleKey

条件:
1.AssemblyInfo.cs 文件中包含有以下特性:

        [assembly: ThemeInfo(

            ResourceDictionaryLocation.None,             //主题特定资源词典所处位置

            ResourceDictionaryLocation.SourceAssembly    //常规资源词典所处位置

        )]

2.控件库项目的 Themes 文件夹:

        YourProject/
        └── Themes/
            └── Generic.xaml

3.自定义控件 CustomControl1的定义:
    public class CustomControl1 : Window
    {
        static CustomControl1()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new                              FrameworkPropertyMetadata(typeof(CustomControl1)));
        }
    }

使用了自定义控件库,检查控件库的项目结构:
CustomControlLibrary/
├── Themes/
│   └── Generic.xaml
├── Controls/
│   └── ExWindow.cs
└── Properties/
      └── AssemblyInfo.cs

自动加载的原理:

1.当 WPF 应用程序启动时,框架会扫描所有引用的程序集

2.对于每个程序集,它会检查是否存在 Themes/Generic.xaml

3.如果找到了,会自动将其加载到应用程序的资源系统中

4.当需要为自定义控件查找样式时,WPF 会:

  • 首先查看控件的 DefaultStyleKey
  • 然后在加载的资源中查找匹配的样式
  • 如果在 Generic.xaml 中找到匹配的样式,就应用它

这就是为什么不需要显式添加 Generic.xaml 的原因 - 它是 WPF 控件开发的一个内置约定。


    http://www.ppmy.cn/embedded/167460.html

    相关文章

    渗透测试【order by盲注实践】

    实践环境基于sqli-lab靶场的第46关进行 bool盲注 代码如下: import requests from bs4 import BeautifulSoup# 定义获取用户名的函数,使用 BeautifulSoup 解析 HTML 页面,提取用户名信息 def get_username(resp):soup BeautifulSoup(resp,…

    HarmonyOS 无线调试

    下载sdk 找到hdc位置> C:\Users\27638\AppData\Local\OpenHarmony\Sdk\14\toolchains 不要去DevEco Studio的窗口不知道为什么调不动 hdc tconn IP:PORT

    DeepSeek 提示词:基础结构

    🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

    Arm 将自己制造芯片

    众所周知,几乎任何目前市面上的手机芯片都是arm公司设计的,这家公司只设计CPU,由苹果、三星、英伟达等厂家再自行生产移动端CPU。 2025年这家英国芯片设计巨头宣布: Arm 将不再只是自己设计芯片,它将自己制造芯片&…

    【Python爬虫(69)】解锁游戏数据宝藏:Python爬虫实战攻略

    【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

    198.打家劫舍

    class Solution:def rob(self, nums: List[int]) -> int:dp [0]*(len(nums)) # 盗窃前i间能取得的最高金额if len(nums) 0:return 0if len(nums) 1:return nums[0]dp[0] nums[0]dp[1] max(nums[0],nums[1])for i in range(2,len(nums)):dp[i] max(dp[i-1],dp[i-2]nums[…

    物联网+大数据,智慧公租房管理系统构建未来社区

    传统的公租房管理模式效率低下,物联网和大数据技术的快速发展,为公租房管理模式提供了新的解决方案 物联网技术通过传感器、射频识别(RFID)、智能设备等手段,将公租房社区内的各种设施、设备、人员连接起来&#xff0…

    显式指定 ChromeDriver 路径

    ‌1️⃣ 显式指定 ChromeDriver 路径‌ 在代码中直接传递驱动路径,绕过 Selenium Manager 的自动检测: pythonCopy Code from selenium import webdriver from selenium.webdriver.chrome.service import Service# 指定 ChromeDriver 绝对路径&#xf…