WPF之URI的使用

pack://application:,

pack://application:, 是一个在 WPF (Windows Presentation Foundation) 应用程序中用于指定资源位置的 URI (统一资源标识符) 方案的特定格式。这个格式用于访问嵌入在应用程序程序集(assemblies)中的资源,如图像、XAML 文件、样式等。

解析这个 URI 的各个部分:

**pack://:**这是 URI 方案的开始,表示这是一个包 URI,用于访问包含在包(在这种情况下是 WPF 应用程序的程序集)中的资源。

**application::**这指定了资源位于当前应用程序的程序集中。与之相对的是 siteoforigin:,后者用于访问与应用程序部署位置相同的网站的资源,但 siteoforigin: 在 WPF 应用程序中较少使用。

**,:**这部分可能看起来有些令人困惑,但它实际上是必须的,并且通常保持为空。在 WPF 的早期版本中,这个位置可能用于指定程序集的名称或路径,但在现代 WPF 应用程序中,当资源位于应用程序的主程序集时,通常留空。如果资源位于另一个程序集中,你会在这里看到该程序集的名称和可能的版本信息,例如 pack://application:,/MyAssembly;component/MyResource.xaml。

总结来说,pack://application:, 用于指定资源位于当前 WPF 应用程序的主程序集中,但没有具体指定程序集名称或路径(因为资源就在主程序集中)。这个 URI 常常与 XAML 中的资源引用一起使用,比如设置控件的 Source 属性来加载一个图像或样式文件。

**URI语法:**pack://application:,/程序集名称;版本号;公钥;component/Images/1-1.bmp

**/程序集名称;版本号;公钥;:**中如果没版本号、公钥的话直接写个程序集名称就可以了,但记得一定要写前面的斜杠/。

pack://application:,是默认的,可以省略。

csharp 复制代码
<Image Source="pack://application:,,,/WPFStudy;component/Images/1-1.bmp"/>

<!--简写-->
<Image Source="/WPFStudy;component/Images/1-1.bmp"/>

原文链接:https://blog.csdn.net/jjailsa/article/details/133860936

例如,如果你有一个名为 MyImage.png 的图像文件,它被添加为 WPF 应用程序项目中的一个资源,并且你想要在 XAML 中使用这个图像,你可能会这样写:

csharp 复制代码
<Image Source="pack://application:,,,/MyNamespace;component/Images/MyImage.png" />

但请注意,如果图像是直接放在项目的根目录下(没有子文件夹),并且是在主程序集中,你可能不需要指定 MyNamespace;component/ 部分,除非图像位于某个特定的命名空间或子文件夹下。然而,对于直接位于根目录的图像,更简单的方式是直接使用相对路径或 /Images/MyImage.png(如果图像在名为 Images 的子文件夹中)作为 Source 的值,前提是图像被设置为"资源"构建操作。

Demo

复制代码
	pack://application:,,,/images/my.jpg
 当然,WPF默认Uri设置有pack://application:,,,,所以我们也可以直接将其写作:
     		  /images/my.jpg
 下面在讲讲装载图片的两种方式,一种用XAML引用资源,一种用代码引用资源。
 用XAML引用资源:
csharp 复制代码
          <Image Source="pack://application:,,,/images/my.jpg"/>
     用代码引用资源:
          Image img;
          img.Source=new BitmapImage(new Uri("pack://application:,,,/images/my.jpg"),UriKind.Relative);
csharp 复制代码
<Window x:Class="testURI.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="400" Width="240">
    <!--堆积面板是最简单的控制面板-->
    <StackPanel>
        <!--1.XAML中引用图片资源-->
        <!--也可用Image Name="image1" Source="pack://application:,,,/images/1.jpg" Height="165" Width="220"/-->
        <Image Name="image1" Source="pack://application:,,,/images/1.jpg" Height="165" Width="220"/>
         
        <!--定义Image对象,但是没有指定图片源,待在代码中指定Source源-->
        <Image Name="image2" Height="165" Width="220"/>
    </StackPanel>
</Window>
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace testURI
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            //2.代码中引用图片资源 
            image2.Source = new BitmapImage(new Uri("/images/2.jpg", UriKind.Relative));
        }
    }
}

WPF入门到跪下 第三章 基础知识-文件资源

相关推荐
C+++Python2 小时前
详细介绍一下Java泛型的通配符
java·windows·python
能喵烧香2 小时前
深度解析:Linux 与 Windows 超级权限账户的本质差异
linux·windows
加号33 小时前
【C#】 文件与目录管理:创建、删除操作的技术解析
开发语言·c#
caimouse6 小时前
Reactos 第 7 章 视窗报文 — 7.5 视窗报文的发送
windows
用户395240998807 小时前
SqlSugar 连接 PostgreSQL 报错 42P01: relation does not exist 的排查与修复
c#
2601_961875248 小时前
法考考试时间安排及科目|时间表|资料已整理
开发语言·c#·inverted-index·suffix-tree·sstable·r-tree·lsm-tree
ServBay8 小时前
你跟高级 C# 工程师的区别,就是这8个开发技巧
后端·c#·.net
callJJ11 小时前
Volta + Claude Code 在 Windows 上的路径 Bug 复盘
windows·bug
女神下凡11 小时前
这是 Cursor(Composer) 的五种核心交互模式
服务器·人工智能·windows·vscode·microsoft
techdashen11 小时前
从 Windows 的 ping.exe 入手:动态库、调用约定与 Rust FFI
开发语言·windows·rust