WPF 中的 Pack URI

合集下载

WPF 中的 PACK URI

WPF 中的 PACK URI
下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于所引用的、特定于版本的程序集的 项目文件夹的根文件夹中。
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml
请注意,所引用的程序集资源文件的 pack URI 语法只能与 application:/// 授权一起使用。 例如, WPF 中不支持下面的格式。
+ Page1.xaml + Page2.xaml 如果 Page1.xaml 包含引用“根目录\子文件夹\Page2.xaml”的 URI,则该引用可以使用下面的相对 pack URI。 Page2.xaml 如果 Page1.xaml 包含引用“根目录\Page2.xaml”的 URI,则该引用可以使用下面的相对 pack URI。 /Page2.xaml
源文件集。 4. 如果找到与 pack URI 的路径匹配的资源文件,则 pack URI 的路径引用资源文件。 5. 如果未找到合适的资源,则内部创建的 Uri 无效。
URI 解析不适用于引用以下文件的 URIs:
所引用的程序集中的内容文件:WPF 不支持这些文件类型。 所引用的程序集中的嵌入式文件:标识这些文件的 URIs 是唯一的,因为它们既包含所引用的程
注意
因为源站点文件不与程序集相关联,所以只能使用绝对 pack URIs 引用源站点文件。
默认情况下,将相对 pack URI 视为相对于包含引用的标记或代码的位置。 但是,如果使用前导反斜 杠,则将相对 pack URI 引用视为相对于应用程序的根目录。 例如,假设有以下项目结构。 App.xaml Page2.xaml \SubFolder

6.1 WPF资源、样式和模板

6.1 WPF资源、样式和模板
项目六 WPF资源、样式和模板—项目美化
讲师 刘振东
本章导读:
本章的主要内容是利用资源、样式和模板的相关知识,美化图 书管理系统。通过项目“系统中各控件美化”为导向,四个任务(美 化TextBlock控件、美化TextBox控件、美化Button控件和自定义控件 模板)为驱动,学习有关WPF资源、样式和模板的知识,本项目着力 使学习者对WPF的资源、样式有一定认识,初步掌握自定义控件模板 的用法。
运行效果如下图所示。
二、知识准备: 1、资源
Resources.resx文件内容的组织形式是的Resources类,使用这个类的方法或属性就能获取 资源。为了让XAML编译器能够访问这个类,一定要把Resources.resx的访 问级别由Internal改为Public。
二、知识准备: 3、XAML解析资源的顺序
在XAML中解析资源按照由引用资源的控件向外层容器依次调用资源。 例如在在应用程序级别、窗体级别及对象级别分为定义x:Key相同的资源: 在App.xaml文件中:
二、知识准备:
<Application x:Class="WpfExample.App“ StartupUri="MainWindow.xaml"> <Application.Resources> <!-- 应用程序级资源 --> <SolidColorBrush Color="Gold" x:Key="myGoldBrush" /> <SolidColorBrush Color="Blue" x:Key="myBrush" /> </Application.Resources>

wpf知识点

wpf知识点

wpf知识点以下是WPF(Windows Presentation Foundation)的一些主要知识点:1. XAML(Extensible Application Markup Language):WPF使用 XAML 作为界面描述语言,通过 XAML 可以清晰地分离界面布局和逻辑代码。

2. 控件:WPF 提供了许多强大的内置控件,如按钮、文本框、列表框、网格等,并且支持自定义控件的创建。

3. 布局管理器:WPF 提供了多种布局管理器,如 StackPanel、Grid、Canvas 等,可以灵活地控制控件的排列和空间分配。

4. 数据绑定:WPF 支持通过数据绑定将界面元素与数据模型进行关联,实现数据在界面上的自动更新和同步。

5. 样式和模板:WPF 允许通过样式和模板来定制控件的外观和行为,可以轻松实现统一的界面风格和可重用的控件布局。

6. 命令和命令绑定:WPF 引入了命令的概念,可以将用户的操作抽象成独立的命令对象,并通过命令绑定将命令与界面元素关联起来。

7. 动画和转换:WPF 提供了丰富的动画和转换功能,可以通过简单的代码实现复杂的动画效果,如渐变、旋转、缩放等。

8. 2D 和 3D 图形:WPF 支持绘制和渲染2D 和 3D 图形,可以创建各种图形效果和交互式图形应用程序。

9. 事件和路由事件:WPF 提供了事件和路由事件机制,可以实现控件之间的高效通信和交互。

10. 媒体和图像处理:WPF 具有强大的媒体和图像处理功能,可以播放音频和视频文件,以及对图像进行处理和展示。

这只是 WPF 的一部分知识点,WPF 是一个功能强大且复杂的框架,有很多更深入的主题和技术需要学习和掌握。

WPF4

WPF4
Uri uri = new Uri(@"pack://application:,,,/source/2.jpg", UriKind.Ab**************************************************
WPF界面元素都具有一个名为Resources的属性,此属性继承自FrameworkElement类,其类型为ResourceDictionary.
</Setter.Value>
</Setter>
</Style>
练习:为页面的TextBlock添加统一的样式:
FontSize--24
TextDecorations--Underline
FontStyle--Italic
</Style>
</Window.Resources>
******************************************************************
模板:就是“具有一定规格的样板”
</ResourceDictionary>
</Window.Resources>
XAML:
<TextBox Text="{StaticResource ResourceKey=str}"/>
C#:
//查询str的资源
t.Text = this.FindResource("str").ToString();
内容文件:项目名称_Content.g.cs(该文件相关信息会编译到程序集中)
XAML:

wpf ui框架materialdesign用法

wpf ui框架materialdesign用法

WPF MaterialDesign 是一种基于WPF 的界面设计框架,它借鉴了Google 的Material Design 设计语言,提供了一系列的控件、样式和模板,帮助开发人员快速构建出符合Material Design 风格的应用应用界面。

以下是使用WPF MaterialDesign 的基本步骤:
1.安装MaterialDesignThemes 程序包。

2.在App.xaml 中添加<Application.Resources>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary
Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/Ma terialDesignTheme.Light.xaml" /> <ResourceDictionary
/> </Application.Resources>。

3.使用Material Design 风格的控件和样式。

例如,使用颜色和阴影来突出按钮的点
击效果,或者使用动画来增强用户界面的交互体验。

此外,WPF MaterialDesign 还提供了丰富的图标资源,开发人员可以方便地在应用程序中使用这些图标,使界面看起来更加美观和直观。

以上信息仅供参考,如需了解更多信息,建议咨询专业人士。

有关WPF学习笔记

有关WPF学习笔记

有关WPF学习笔记第八章资源为了改变按钮的外观。

二进制资源二进制资源类型是.NET Framework其他局部认为的资源,就是传统的资源项,位图啊什么的,可以把编译后的xaml作为资源存到里面,二进制资源有三种不同方式进行打包:1、嵌入程序集2、编译时应用程序的松散文件3、编译时应用程序不知道的松散文件注意二进制资源的定义,访问,和本地化。

1、定义在工程中添加文件,然后选择,resource,content(松散文件)2、访问通过content构建动作廉洁一些松散文件,或者在编译时不对这些松散文件进行处理。

WPF提供一一种机制,通过URI从代码或者xaml中访问这些资源文件,类型转换器允许我们在xaml中用简单字符串设置这些uri。

于是先用resource把那些图片保存在xaml中,然后代码如下System.Windos.Control.Image是一种很方便访问一个二进制图像的控件。

逻辑资源逻辑资源是一些存储在元素的resource属性中的.Net对象。

通常需要共享给多个子元素。

这些逻辑资源通常是一些样式或者数据提供程序。

比方要使用一个定义为资源的刷子去刷一个按钮背景Yellow就行了。

第十章样式、模板、皮肤和主题WPF最著名的特性是可以改变任何用户界面元素的外观,同时功能丝毫不差。

其他的程序大多数都是用图片来显示一个按钮二不是真正的使用一个按钮。

WPF的哲学史,创立的应用程序体验的好坏是由设计师的技能决定的,而不是受到所使用的平台的限制。

注意样式的语法。

阅读全文类别:默认分类查看评论模板,内容仅供参考。

WPF全局样式(滚动条)

WPF全局样式(滚动条)

WPF全局样式(滚动条)对整个WPF项⽬进⾏样式修改时,采⽤全局样式的⽅法。

⾸先,建⼀个xaml⽂件为存放样式的资源⽂件。

写⼊想修改的控件样式,以滚动条样式为例。

1 <ResourceDictionary xmlns="/winfx/2006/xaml/presentation"2 xmlns:x="/winfx/2006/xaml"3 xmlns:sys="clr-namespace:System;assembly=mscorlib">4 <!-- ScrollViewer 滚动条 -->5 <Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">6 <Setter Property="OverridesDefaultStyle" Value="true"/>7 <Setter Property="IsTabStop" Value="false"/>8 <Setter Property="Template">9 <Setter.Value>10 <ControlTemplate TargetType="{x:Type Thumb}">11 <Grid>12 <!--滚动条颜⾊-->13 <Border Background="#646465" CornerRadius="3"/>14 </Grid>15 </ControlTemplate>16 </Setter.Value>17 </Setter>18 </Style>19 <Style x:Key="HorizontalScrollBarPageButton" TargetType="{x:Type RepeatButton}">20 <Setter Property="OverridesDefaultStyle" Value="true"/>21 <Setter Property="Background" Value="Transparent"/>22 <Setter Property="Focusable" Value="false"/>23 <Setter Property="IsTabStop" Value="false"/>24 <Setter Property="Opacity" Value="0.2"/>25 <Setter Property="Template">26 <Setter.Value>27 <ControlTemplate TargetType="{x:Type RepeatButton}">28 <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>29 </ControlTemplate>30 </Setter.Value>31 </Setter>32 </Style>33 <Style x:Key="VerticalScrollBarPageButton" TargetType="{x:Type RepeatButton}">34 <Setter Property="OverridesDefaultStyle" Value="true"/>35 <Setter Property="Background" Value="Transparent"/>36 <Setter Property="Focusable" Value="false"/>37 <Setter Property="IsTabStop" Value="false"/>38 <Setter Property="Opacity" Value="0.2"/>39 <Setter Property="Template">40 <Setter.Value>41 <ControlTemplate TargetType="{x:Type RepeatButton}">42 <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>43 </ControlTemplate>44 </Setter.Value>45 </Setter>46 </Style>4748 <!--滚动条上下按钮-->49 <Style x:Key="VerticalScrollBarPageButton2" TargetType="{x:Type RepeatButton}">50 <Setter Property="OverridesDefaultStyle" Value="true"/>51 <Setter Property="Background" Value="Transparent"/>52 <Setter Property="Focusable" Value="false"/>53 <Setter Property="IsTabStop" Value="false"/>54 <Setter Property="Opacity" Value="0"/>55 <Setter Property="Template">56 <Setter.Value>57 <ControlTemplate TargetType="{x:Type RepeatButton}">58 <Rectangle Fill="#90000000" Width="0" Height="0"/>59 </ControlTemplate>60 </Setter.Value>61 </Setter>62 </Style>63 <Style x:Key="for_scrollbar" TargetType="{x:Type ScrollBar}">64 <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>65 <Setter Property="Stylus.IsFlicksEnabled" Value="false"/>66 <Setter Property="Background" Value="Transparent"/>67 <Setter Property="Margin" Value="0,1,1,6"/>68 <Setter Property="Width" Value="10"/>69 <Setter Property="MinWidth" Value="5"/>70 <Setter Property="Opacity" Value="0.2"/>71 <Setter Property="Template">72 <Setter.Value>73 <ControlTemplate TargetType="{x:Type ScrollBar}">74 <Grid x:Name="Bg" SnapsToDevicePixels="true">75 <Grid.RowDefinitions>76 <RowDefinition Height="auto"></RowDefinition>77 <RowDefinition Height="*"></RowDefinition>78 <RowDefinition Height="auto"></RowDefinition>79 </Grid.RowDefinitions>80 <RepeatButton Grid.Row="0" Style="{StaticResource VerticalScrollBarPageButton2}" Command="{x:Static ScrollBar.PageUpCommand}"/>81 <Track x:Name="PART_Track" Grid.Row="1" IsEnabled="{TemplateBinding IsMouseOver}" IsDirectionReversed="true">82 <Track.DecreaseRepeatButton>83 <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" Command="{x:Static ScrollBar.PageUpCommand}"/>84 </Track.DecreaseRepeatButton>85 <Track.IncreaseRepeatButton>86 <RepeatButton Style="{StaticResource VerticalScrollBarPageButton}" Command="{x:Static ScrollBar.PageDownCommand}"/>87 </Track.IncreaseRepeatButton>88 <Track.Thumb>89 <Thumb Style="{StaticResource ScrollBarThumb}"/>90 </Track.Thumb>91 </Track>92 <RepeatButton Grid.Row="2" Style="{StaticResource VerticalScrollBarPageButton2}" Command="{x:Static ScrollBar.PageDownCommand}"/>93 </Grid>94 </ControlTemplate>95 </Setter.Value>96 </Setter>97 <Style.Triggers>98 <Trigger Property="Orientation" Value="Horizontal">99 <Setter Property="Background" Value="Transparent"/>100 <Setter Property="Margin" Value="1,0,6,1"/>101 <Setter Property="Height" Value="5"/>102 <Setter Property="MinHeight" Value="5"/>103 <Setter Property="Width" Value="Auto"/>104 <Setter Property="Opacity" Value="0.2"/>105 <Setter Property="Template">106 <Setter.Value>107 <ControlTemplate TargetType="{x:Type ScrollBar}">108 <Grid x:Name="Bg" SnapsToDevicePixels="true">109 <Track x:Name="PART_Track" IsEnabled="{TemplateBinding IsMouseOver}">110 <Track.DecreaseRepeatButton>111 <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageLeftCommand}"/>112 </Track.DecreaseRepeatButton>113 <Track.IncreaseRepeatButton>114 <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageRightCommand}"/>115 </Track.IncreaseRepeatButton>116 <Track.Thumb>117 <Thumb Style="{StaticResource ScrollBarThumb}"/>118 </Track.Thumb>119 </Track>120 </Grid>121 </ControlTemplate>122 </Setter.Value>123 </Setter>124 </Trigger>125 </Style.Triggers>126 </Style>127 <Style x:Key="for_scrollviewer"128 TargetType="{x:Type ScrollViewer}">129 <Setter Property="BorderBrush" Value="LightGray"/>130 <Setter Property="BorderThickness" Value="0"/>131 <Setter Property="Template">132 <Setter.Value>133 <ControlTemplate TargetType="{x:Type ScrollViewer}">134 <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">135 <Grid Background="{TemplateBinding Background}">136 <ScrollContentPresenter Cursor="{TemplateBinding Cursor}" Margin="{TemplateBinding Padding}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 137 <ScrollBar x:Name="PART_VerticalScrollBar"138 HorizontalAlignment="Right"139 Maximum="{TemplateBinding ScrollableHeight}"140 Orientation="Vertical"141 Style="{StaticResource for_scrollbar}"142 ViewportSize="{TemplateBinding ViewportHeight}"143 Value="{TemplateBinding VerticalOffset}"144 Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>145 <ScrollBar x:Name="PART_HorizontalScrollBar"146 Maximum="{TemplateBinding ScrollableWidth}"147 Orientation="Horizontal"148 Style="{StaticResource for_scrollbar}"149 VerticalAlignment="Bottom"150 Value="{TemplateBinding HorizontalOffset}"151 ViewportSize="{TemplateBinding ViewportWidth}"152 Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>153 </Grid>154 </Border>155 <ControlTemplate.Triggers>156 <EventTrigger RoutedEvent="ScrollChanged" >157 <BeginStoryboard>158 <Storyboard>159 <DoubleAnimation160 Storyboard.TargetName="PART_VerticalScrollBar"161 Storyboard.TargetProperty="Opacity"162 To="0.8"163 Duration="0:0:1"/>164 <DoubleAnimation165 Storyboard.TargetName="PART_VerticalScrollBar"166 Storyboard.TargetProperty="Opacity"167 To="0.2"168 Duration="0:0:1"169 BeginTime="0:0:1"/>170 <DoubleAnimation171 Storyboard.TargetName="PART_HorizontalScrollBar"172 Storyboard.TargetProperty="Opacity"173 To="0.8"174 Duration="0:0:1"/>175 <DoubleAnimation176 Storyboard.TargetName="PART_HorizontalScrollBar"177 Storyboard.TargetProperty="Opacity"178 To="0.2"179 Duration="0:0:1"180 BeginTime="0:0:1"/>181 </Storyboard>182 </BeginStoryboard>183 </EventTrigger>184 <EventTrigger RoutedEvent="MouseEnter"185 SourceName="PART_VerticalScrollBar">186 <BeginStoryboard>187 <Storyboard>188 <DoubleAnimation189 Storyboard.TargetName="PART_VerticalScrollBar"190 Storyboard.TargetProperty="Opacity"191 To="0.8"192 Duration="0:0:0.7"/>193 </Storyboard>194 </BeginStoryboard>195 </EventTrigger>196 <EventTrigger RoutedEvent="MouseLeave"197 SourceName="PART_VerticalScrollBar">198 <BeginStoryboard>199 <Storyboard>200 <DoubleAnimation201 Storyboard.TargetName="PART_VerticalScrollBar"202 Storyboard.TargetProperty="Opacity"203 To="0.2"204 Duration="0:0:0.7"/>205 </Storyboard>206 </BeginStoryboard>207 </EventTrigger>208 <EventTrigger RoutedEvent="MouseEnter"209 SourceName="PART_HorizontalScrollBar">210 <BeginStoryboard>211 <Storyboard>212 <DoubleAnimation213 Storyboard.TargetName="PART_HorizontalScrollBar"214 Storyboard.TargetProperty="Opacity"215 To="0.8"216 Duration="0:0:0.7"/>217 </Storyboard>218 </BeginStoryboard>219 </EventTrigger>220 <EventTrigger RoutedEvent="MouseLeave"221 SourceName="PART_HorizontalScrollBar">222 <BeginStoryboard>223 <Storyboard>224 <DoubleAnimation225 Storyboard.TargetName="PART_HorizontalScrollBar"226 Storyboard.TargetProperty="Opacity"227 To="0.2"228 Duration="0:0:0.7"/>229 </Storyboard>230 </BeginStoryboard>231 </EventTrigger>232 </ControlTemplate.Triggers>233 </ControlTemplate>234 </Setter.Value>235 </Setter>236 </Style>237238239 </ResourceDictionary>View Code然后,在App.xaml⾥添加对资源⽂件的引⽤,<ResourceDictionary Source="pack://application:,,,/Resource/Scroll.xaml"/>。

wpf [required] 的用法

wpf [required] 的用法

一、WPF概述Windows Presentation Foundation(WPF)是一种用于创建Windows应用程序的.NET框架。

它提供了丰富的用户界面、图形和多媒体功能,使开发人员能够创建出色的桌面应用程序。

WPF使用XAML(Extensible Application Markup Language)来定义用户界面,具有灵活、可扩展的特性,使得开发人员可以轻松地创建各种复杂的用户界面和交互效果。

二、WPF的优势1. 灵活的界面设计WPF使用XAML来描述界面,允许开发人员将界面和功能分离。

这种分离可以使设计师和开发人员分工合作,设计师可以专注于界面的外观和交互,而开发人员可以专注于功能的实现。

XAML可以轻松地实现各种界面效果,如动画、转换和触摸交互等。

2. 数据绑定WPF提供了强大的数据绑定功能,可以将界面元素与数据模型相关联。

这样可以实现自动更新界面和数据之间的同步,极大地简化了开发人员的工作。

3. 可重用的控件WPF包含丰富的内置控件,如按钮、文本框、列表框等,开发人员可以轻松地将这些控件组合起来,创建丰富多样的用户界面。

WPF还支持自定义控件和样式,使得开发人员可以创建自己的可重用组件,提高了开发效率。

4. 3D图形和动画WPF支持在界面中使用3D图形和动画,使得开发人员可以实现更加生动、吸引人的用户界面。

这对于需要展示大量图形和动画的应用程序来说,具有非常重要的意义。

5. 跨评台兼容WPF基于.NET框架,具有良好的跨评台兼容性,可以在各种Windows操作系统上运行。

这意味着开发人员可以编写一次代码,然后在不同的Windows设备上运行,极大地简化了开发和维护工作。

三、WPF的基本用法1. 创建WPF应用程序要创建一个WPF应用程序,首先需要在Visual Studio中新建一个WPF项目。

在新建项目对话框中选择WPF Application模板,然后输入项目名称和保存路径,点击确定即可创建一个新的WPF应用程序项目。

WPF编程宝典(Prowpfinc#2012)(文摘)

WPF编程宝典(Prowpfinc#2012)(文摘)

WPF编程宝典(Prowpfinc#2012)(⽂摘)第⼀部分基础知识第1章 WPF概述1.1 Windows图形演化1.1.1 DirectX:新的图形引擎1.1.2 硬件加速与WPF1.2 WPF:⾼级API类似Web的布局模型,丰富的绘图模型,丰富的⽂本模型,作为⾸要编程概念的动画,⽀持⾳频和视频媒体,样式和模板,命令,声明式⽤户界⾯,基于页⾯的应⽤程序1.3 分辨率⽆关性(使⽤系统DPI设置)1.3.1 WPF单位(设备⽆关的单位,1/96英⼨)1.3.2 系统DPI1.3.3 位图和⽮量图形1.4 WPF体系结构1.5 WPF 4.51.6 ⼩结(1.硬件加速,2.分辨率⽆关,3 控件⽆固定外观,4.声明式⽤户界⾯,5,基于对象的绘图,图形技术不再是GDI/GDI+,⽽是DirectX,交给图形处理单元(GPU))第2章 XAML2.1 理解XAML2.1.1 WPF之前的图形界⾯2.1.2 XAML变体2.1.3 XAML编译2.2 XAML基础2.2.1 XAML命名空间xmlns2.2.2 代码隐藏类2.3 XAML中的属性和事件2.3.1 简单属性和类型转换器不是真正的属性,实际上被转换为⽅法调⽤2.3.5 嵌套元素2.3.6 特殊字符与空⽩2.3.7 事件2.4 使⽤其他名称空间中的类型2.5 加载和编译XAML2.5.1 只使⽤代码2.5.2 使⽤代码和未经编译的XAML2.5.3 使⽤代码和编译过的XAML2.5.4 只使⽤XAML2.6 ⼩结第3章布局3.1 理解WPF中的布局3.1.1 WPF布局原则3.1.2 布局过程3.1.3 布局容器3.2 使⽤StackPanel⾯板进⾏简单布局3.2.1 布局属性3.2.2 对齐⽅式3.2.3 边距3.2.4 最⼩尺⼨,最⼤尺⼨以及显⽰地设置尺⼨3.2.5 Border控件3.3 WrapPanel和DockPanel⾯板3.3.1 WrapPanel⾯板3.3.2 DockPanel⾯板3.3.3 嵌套布局容器3.4.3 跨越⾏和列3.4.4 分割窗⼝3.4.5 共享尺⼨组3.4.6 UniformGrid⾯板3.5 使⽤Canvas⾯板进⾏坐标的布局3.5.1 Z顺序3.5.2 InkCanvas元素3.6 布局⽰例3.6.1 列设置3.6.2 动态内容3.6.3 组合式⽤户界⾯3.7 ⼩结第4章依赖项属性4.1 理解依赖项属性4.1.1 定义依赖项属性4.1.2 注册依赖项属性4.1.3 添加属性包装器4.1.4 WPF使⽤依赖项属性的⽅式更改通知和动态值识别4.1.5 共享的依赖项属性4.1.6 附加的依赖项属性不必定义net属性封装器4.2 属性验证4.2.1 验证回调4.2.2 强制回调4.3 ⼩结第5章路由事件5.1 理解路由事件5.1.1 定义,注册,和封装路由事件5.1.2 共享路由事件5.1.3 引发路由事件5.1.4 处理路由事件5.2 事件路由5.2.1 RoutedEventArgs类5.2.2 冒泡路由事件5.2.3 处理挂起的事件5.2.4 附加事件5.2.5 隧道路由事件5.3 WPF事件5.3.1 ⽣命周期事件5.3.2 输⼊事件5.4 键盘输⼊5.4.1 处理按键事件5.4.2 焦点5.4.3 获取键盘的状态5.5 ⿏标输⼊5.5.1 ⿏标单击5.5.2 捕获⿏标5.5.3 ⿏标拖放5.6 多点触控输⼊5.6.1 多点触控的输⼊层次5.6.2 原始触控5.6.3 操作5.6.4 惯性5.7 ⼩结事件路由允许源⾃某个元素的事件由另⼀个元素引发。

C#语言中WPF Resource 学习

C#语言中WPF Resource 学习

WPF Resource学习1.二进制资源WPF支持三种方式的二进制资源,这些资源可以非常方便地在XAML中使用。

∙Resource:将资源嵌入程序集中,和Embedded Resource有点像。

区别在于WPF将相关资源打包到.Resources文件,然后再由编译器嵌入到程序集文件中。

WPF默认的URI访问方式是不支持Embedded Resource的。

∙Content:资源不会嵌入到程序集,仅仅在程序集清单中添加一条记录,这和以往我们所熟悉的方式一样。

资源文件必须随其他程序集文件一起部署到目标目录。

∙Loose File:这类资源通常是运行期动态确定或加入的。

WPF通过统一资源标识符(URI)访问相关资源文件。

(1)访问Resource/Content资源<Image Source="/a.png"/><Image Source="/xxx/x.png"/>(2)访问松散资源文件(Loose File)<Image Source="pack://siteOfOrigin:,,,/a.png"/><Image Source="c:\test\a.png"/>XAML编译时需要验证所有资源有效性,因此在使用松散资源文件时必须使用有效的URI路径。

"pack://"表示Package URI,"pack://siteOfOrigin:,,,"表示从部署位置开始,相应的还有"pack://application:,,,"上面的Resource资源全路径应该是"pack://application:,,,/a.png",只不过通常情况下我们使用省略写法而已。

<Image Source="pack://application:,,,/a.png"/>其他的URI写法还包括:(3)访问其他程序集中的资源文件提供一个可替换的专用资源DLL也是一种常用编程手法,尤其是多语言或者换肤机制。

wpf 常用控件和使用方法

wpf 常用控件和使用方法

WPF常用控件和使用方法WPF(Windows Presentation Foundation)是一种用于创建用户界面的技术,它提供了一套丰富的控件库,可以用于构建各种类型的应用程序。

本文将介绍WPF中常用的控件以及它们的使用方法。

1. Button(按钮)按钮是WPF中最基本、最常用的控件之一,用于触发用户操作。

以下是创建和使用按钮的示例:<Button Content="Click Me" Click="Button_Click"/>在上述示例中,我们创建了一个名为”Click Me”的按钮,并通过Click事件指定了点击按钮时要执行的方法。

2. TextBox(文本框)文本框用于接收用户输入或显示文本内容。

以下是创建和使用文本框的示例:<TextBox Text="{Binding UserName}" Width="200"/>上述示例中,我们创建了一个绑定到UserName属性的文本框,并设置其宽度为200个单位。

3. Label(标签)标签用于显示静态文本内容。

以下是创建和使用标签的示例:<Label Content="Hello, World!" FontSize="16"/>在上述示例中,我们创建了一个内容为”Hello, World!“的标签,并设置其字体大小为16个单位。

4. CheckBox(复选框)复选框允许用户从多个选项中选择一个或多个。

以下是创建和使用复选框的示例:<CheckBox Content="Option 1" IsChecked="{Binding Option1}"/>在上述示例中,我们创建了一个名为”Option 1”的复选框,并通过IsChecked属性绑定到Option1属性。

wpf知识点范文

wpf知识点范文

wpf知识点范文1. XAML(Extensible Application Markup Language):WPF使用XAML来定义用户界面,它是一种基于XML的标记语言,用于描述应用程序的外观和行为。

XAML与代码分离,使得界面设计师和开发人员可以并行工作,并提供更好的可维护性和定制性。

2. 依赖性属性(Dependency Properties):WPF的一个重要概念是依赖性属性,它是一种特殊类型的属性,可以支持更多的功能,如数据绑定、样式、动画等。

依赖性属性具有值计算、值继承和值转换等特性,可以简化界面元素的开发和维护。

3. 数据绑定(Data Binding):WPF提供了强大的数据绑定功能,可以将界面元素与后台数据源进行绑定,使得数据的展示和更新更加简单和自动化。

数据绑定支持单向绑定、双向绑定和一次性绑定等多种模式,并提供了转换器和验证器来进行数据的转换和校验。

5. 样式(Styles):WPF的样式机制可以让开发人员对界面元素进行样式的统一管理和定制。

样式可以定义在资源中,并通过键进行引用,从而实现对整个应用程序或特定区域的样式的修改。

样式还可以通过继承和覆盖的方式进行扩展和细化。

6. 控件模板(Control Templates):WPF允许开发人员完全重新定义控件的外观和行为,以满足特定的需求。

通过控件模板,开发人员可以将控件的可视化树以XAML的形式重新定义,并为其添加自定义的行为和交互逻辑。

7. 动画(Animations):WPF提供了丰富的动画功能,可以为界面元素添加各种效果和动态变化。

动画可以通过关键帧和路径来定义,可以用于控件的显示和隐藏、位置的移动、大小的调整等场景,并支持多种属性和缓动函数的动态变化。

8. 2D/3D绘图(Graphics):WPF在图形方面也有很大的突破,支持高级的2D和3D绘图功能。

开发人员可以使用矢量图形、位图、渐变、阴影等技术来创建丰富的图形效果,并通过3D模型、灯光、材质等技术来实现逼真的三维效果。

WPF中的image控件的Source赋值

WPF中的image控件的Source赋值

WPF中的image控件的Source赋值WPF中的Image控件Source的设置1.XAML中简单的⽅式(Source="haha.png");image控件的Source设置为相对路径后(Source="haha.png")运⾏不能显⽰解决⽅案:当Source设置为相对路径后(Source="haha.png")改成“/WpfApplication1;component/haha.png”。

2.逻辑代码中img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/haha.jpg"));//或img.Source = new BitmapImage(new Uri("pack://SiteOfOrigin:,,,/Images/haha.jpg"));下⾯讲解这两种⽤法(参考博客http://www点/projecteactual/wpf-jiaocheng-tupian-lujing-uri.html)今天就来详细说明wpf图⽚资源的路径问题和如何设置?⼀开始我在后台直接复制图⽚路径是物理路径:b.ImageSource = new BitmapImage(new Uri("../Themes/ZCThemes/skin/icon/card_unchoose.png", UriKind.RelativeOrAbsolute));在visual studio 2013中是没有问题的。

但是发布后,单独运⾏exe就出错了。

这个就涉及到wpf的新协议: WPF引⼊了统⼀资源标识Uri(Unified Resource Identifier)来标识和访问资源。

其中较为常见的情况是⽤Uri加载图像。

Uri表达式的⼀般形式为:协议+授权+路径协议:pack://授权:有两种。

wpf工程文件中各文件的基本情况

wpf工程文件中各文件的基本情况

wpf工程文件中各文件的基本情况WPF工程文件中各文件的基本情况WPF(Windows Presentation Foundation)是微软公司推出的一种用于创建Windows桌面应用程序的技术框架。

在WPF工程中,各个文件扮演着不同的角色,负责不同的任务。

本文将从文件的角度,介绍WPF工程中各个文件的基本情况。

1. XAML文件XAML(eXtensible Application Markup Language)是一种用于定义用户界面的标记语言。

在WPF工程中,XAML文件扮演着定义界面布局和外观的角色。

通过XAML文件,开发人员可以使用标记语言的方式描述界面元素和布局,使得界面的设计与代码的逻辑分离,提高开发效率。

2. Code-behind文件Code-behind文件是与XAML文件相对应的代码文件,通常使用C#或编写。

在Code-behind文件中,开发人员可以编写与界面逻辑相关的代码,例如事件处理、数据绑定和控件操作等。

Code-behind文件与XAML文件通过部分类的方式关联在一起,使得界面逻辑与界面布局相分离,增强了代码的可读性和维护性。

3. 资源文件资源文件是存放应用程序所需资源的文件,例如图像、样式、字符串等。

在WPF工程中,可以使用两种类型的资源文件:本地资源文件和全局资源文件。

本地资源文件存放在单个XAML文件或Code-behind文件中,而全局资源文件则可在整个应用程序中共享。

通过使用资源文件,开发人员可以实现资源的重用和集中管理,提高开发效率。

4. 项目文件项目文件是WPF工程的核心文件,它用于描述整个工程的组织结构和依赖关系。

在项目文件中,可以定义项目的属性、引用的程序集、编译选项等。

通过项目文件,开发人员可以对工程进行管理和配置,例如添加新文件、设置启动项目、发布应用程序等。

5. 配置文件配置文件是存放应用程序配置信息的文件,例如数据库连接字符串、日志级别等。

WPF的路由事件、冒泡事件、隧道事件(预览事件)

WPF的路由事件、冒泡事件、隧道事件(预览事件)

WPF的路由事件、冒泡事件、隧道事件(预览事件)本⽂摘要:1:什么是路由事件;2:中断事件路由;3:⾃定义路由事件;4:为什么需要⾃定义路由事件;5:什么是冒泡事件和预览事件(隧道事件);1:什么是路由事件WPF中的事件为路由事件,所谓路由事件,MSDN定义如下:功能定义:路由事件是⼀种可以针对元素树中的多个侦听器(⽽不是仅针对引发该事件的对象)调⽤处理程序的事件。

实现定义:路由事件是⼀个 CLR 事件,可以由类的实例提供⽀持并由 Windows Presentation Foundation (WPF) 事件系统来处理。

但这两类定义都⽐较抽象,我们来看更具体的定义:<Border Height="50" Width="250" BorderBrush="Gray" BorderThickness="1" ><StackPanel Background="LightGray" Orientation="Horizontal" MouseUp="StackPanel_MouseUp"><TextBlock Name="YesTB" Width="50" MouseUp="YesTB_MouseUp" Background="Blue" >Yes</TextBlock></StackPanel></Border>在这个例⼦中,事件的事件路由为:TextBlock -->StackPanel-->Border —>...2:中断事件路由所有的路由事件都共享⼀个公共的事件数据基类。

定义了⼀个采⽤布尔值的属性。

WPF 中的 PACK URI

WPF 中的 PACK URI
程序包和部件之间的关系类似于应用程序和文件之间的关系,其中,应用程序(程序包)可以包含一个 或多个文件(部件),包括:
编译到本地程序集中的资源文件。 编译到所引用的程序集中的资源文件。 编译到进行引用的程序集中的资源文件。 内容文件。 源站点文件。 为了访问这些类型的文件,WPF 支持两种授权:application:/// 和 siteoforigin:///。 Application:/// 授权标识在编译时已知的应用程序数据文件,包括资源文件和内容文件。 Siteoforigin:/// 授权标识源站点文件。 下图显示了每种授权的范围。
注意
因为源站点文件不与程序集相关联,所以只能使用绝对 pack URIs 引用源站点文件。
默认情况下,将相对 pack URI 视为相对于包含引用的标记或代码的位置。 但是,如果使用前导反斜 杠,则将相对 pack URI 引用视为相对于应用程序的根目录。 例如,假设有以下项目结构。 App.xaml Page2.xaml \SubFolder
序集的名称,又包含 ;component 后缀。 源站点文件:标识这些文件的 URIs 是唯一的,因为只有这些文件才能用包含 siteoforigin:///
授权的 pack URIs 进行标识。
Pack URI 解析
Pack URIs 的格式使得有可能让不同类型的文件的 pack URIs 看起来相同。 例如,假设有以下绝对 pack URI。 pack://application:,,,/ResourceOrContentFile.xaml 此绝对 pack URI 可以引用本地程序集中的资源文件,也可以引用内容文件。 对于下面的相对 URI 来 讲也是如此。 /ResourceOrContentFile.xaml 为了确定 pack URI 引用的文件的类型,WPF 使用下面的试探法来解析本地程序集中的资源文件以及内 容文件的 URIs:

WPF学习之路(十三)URL

WPF学习之路(十三)URL

WPF学习之路(⼗三)URLURL⼀般由三个部分组成,协议、资源所在主机地址、资源路径WPF中URL同样有三部分组成:pack、authority(application:| siteoforigin:)、路径资源⽂件本地程序集Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);引⽤的程序集Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute); Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);内容⽂件Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute); 源站点⽂件Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);相对URLUri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);以上内容转载⾃MSDNTo be continue...。

WPF快速入门系列(3)——深入解析WPF事件机制

WPF快速入门系列(3)——深入解析WPF事件机制

WPF快速⼊门系列(3)——深⼊解析WPF事件机制⼀、引⾔ WPF除了创建了⼀个新的依赖属性系统之外,还⽤更⾼级的路由事件功能替换了普通的.NET事件。

路由事件是具有更强传播能⼒的事件——它可以在元素树上向上冒泡和向下隧道传播,并且沿着传播路径被事件处理程序处理。

与依赖属性⼀样,可以使⽤传统的事件⽅式使⽤路由事件。

尽管路由事件的使⽤⽅式与传统的事件⼀样,但是理解其⼯作原理还是相当重要的。

⼆、路由事件的详细介绍 对于.NET中的事件,⼤家应该在熟悉不过了。

事件指的在某个事情发⽣时,由对象发送⽤于通知代码的消息。

WPF中的路由事件允许事件可以被传递。

例如,路由事件允许⼀个来⾃⼯具栏按钮的单击事件,在被处理之前可以传递到⼯具栏,然后再传递到包含⼯具栏的窗⼝。

那么现在问题来了,我怎样在WPF中去定义⼀个路由事件呢?2.1 如何定义路由事件 既然有了问题,⾃然就要去解决了。

在⾃⼰定义⼀个依赖属性之前,⾸先,我们得学习下WPF框架中是怎么去定义的,然后按照WPF框架中定义的⽅式去试着⾃⼰定义⼀个依赖属性。

下⾯通过Reflector⼯具来查看下WPF中按钮的Click事件的定义⽅式。

由于Button按钮的Click事件是继承于基类的,所以我们直接来查看ButtonBase中Click事件的定义。

具体的定义代码如下所⽰:[Localizability(LocalizationCategory.Button), DefaultEvent("Click")]public abstract class ButtonBase : ContentControl, ICommandSource{// 事件定义public static readonly RoutedEvent ClickEvent;// 事件注册static ButtonBase(){ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonBase));CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(ButtonBase), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(ButtonBase.OnCommandChanged))); .......}// 传统事件包装public event RoutedEventHandler Click{add{base.AddHandler(ClickEvent, value);}remove{base.RemoveHandler(ClickEvent, value);}}.......} 从上⾯代码可知,路由事件的定义与依赖属性的定义类似,路由事件由只读的静态字段表⽰,在⼀个静态构造函数通过函数注册,并且通过⼀个.NET事件定义进⾏包装。

wpf listviewitemcontainerstyle详解

wpf listviewitemcontainerstyle详解

WPF(Windows Presentation Foundation)中的ListViewItemContainerStyle是用于定义ListView控件中每个项(Item)的容器样式的属性。

这个样式决定了如何渲染和显示ListView中的每一项。

在WPF中,每种条目控件(如ListBox、ComboBox等)都有自己对应的ItemContainer,这是一个用于包含和显示数据的容器。

对于ListView来说,其ItemContainer就是ListViewItem。

通过ListView.ItemContainerStyle属性,您可以自定义ListViewItem的样式,包括布局、显示与隐藏、背景等。

这在创建具有复杂或特定视觉效果的列表时非常有用。

下面是一个简单的例子,展示了如何使用ListView.ItemContainerStyle来自定义ListViewItem的样式:xml<ListView ItemsSource="{Binding YourItemsSource}"><ListView.ItemContainerStyle><Style TargetType="ListViewItem"><Setter Property="Background" Value="LightBlue"/><Setter Property="Foreground" Value="Black"/><Setter Property="Padding" Value="10,5"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListViewItem"><Border BorderBrush="Black" BorderThickness="1" Background="{TemplateBinding Background}"><ContentPresenter/></Border></ControlTemplate></Setter.Value></Setter><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="LightGreen"/></Trigger><Trigger Property="IsSelected" Value="True"><Setter Property="Background" Value="LightCoral"/></Trigger></Style.Triggers></Style></ListView.ItemContainerStyle><!-- ListView的其他属性和内容 --></ListView>在上面的代码中,我们为ListViewItem定义了一个样式,设置了其背景色、前景色和内边距。

winform和wpf的相互调用

winform和wpf的相互调用

如何在WPF中调用Winform控件/aqiang000000/blog/item/05507e3692c9b4daa3cc2ba3.html功能实现主要分三步:1、添加两个引用:WindowsFormsIntegration.dll (负责整合WPF和Windows)、System.Windows.Forms.2、在XAML文件中添加两个引用(粗体部分):<Window x:Class="CrossBowDemo.MainWindow"xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFor msIntegration"xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms "xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"Title="Hosting Windows Forms Control In WPF"Height="300"Width="650"ResizeMode="NoResize"Loaded="WindowLoadedHandler"></Window>3、在XAML编码区实现你想添加的控件:原文添加的是 DataGridView控件:<wfi:WindowsFormsHost><!-- Set some properties on Windows Forms control in Xaml --><wf:DataGridView x:Name="dataGridView"Dock="Fill"SelectionMode="FullRowSelec t"/></wfi:WindowsFormsHost>效果图:本人添加的是NumericUpDown控件:<Grid Height="0"Margin="146,0,0,116"MinHeight="20"MinWidth="20"Name="grid1" VerticalAlignment="Bottom"HorizontalAlignment="Left"Width="50"><wfi:WindowsFormsHost><wf:NumericUpDown x:Name="nupCounter"Maximum="100"></wf:NumericUpDown></wfi:WindowsFormsHost></Grid>效果图:在本人的代码中Grid的作用相当于Web页面中用来布局的Table。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WPF 中的 Pack URI在 Windows Presentation Foundation (WPF) 中,使用uniform resource identifiers (URIs) 标识和加载文件的方式有很多,包括:∙指定当应用程序第一次启动时显示的user interface (UI)。

∙加载图像。

∙导航到页∙加载不可执行的数据文件。

此外,可以使用 URIs 标识和加载位于各种位置的文件,这些位置包括:∙当前程序集。

∙所引用的程序集。

∙相对于程序集的某个位置。

∙应用程序的源站点。

为了提供从这些位置标识和加载上述类型的文件的一致机制,WPF 利用了 pack URI 方案的扩展性。

本主题将概述这一方案,介绍如何为各种方案构造 pack URIs,讨论绝对和相对 URIs 以及 URI 解析,然后说明如何在标记和代码中使用 pack URIs。

本主题包括下列各节。

∙Pack URI 方案∙资源文件Pack URI∙内容文件Pack URI∙源站点Pack URI∙页面文件∙绝对与相对Pack URI∙Pack URI 解析∙使用Pack URI 编程∙相关主题Pack URI 方案Pack URI 方案由Open Packaging Conventions(开放式打包约定,OPC)规范使用,该规范描述用于组织和标识内容的模型。

此模型的关键元素是程序包和部件,其中,“程序包”是一个或多个逻辑“部件”的逻辑容器。

下图阐释了此概念。

为了标识部件,OPC 规范利用 RFC 2396(统一资源标识符 (URI):一般语法)的扩展性来定义 pack URI 方案。

URI 所指定的方案由其前缀定义;http、ftp 和 file 是众所周知的示例。

Pack URI 方案使用“pack”作为它的方案,并且包含两个组件:授权和路径。

以下是 pack URI 的格式。

pack://授权/路径授权指定包含部件的程序包的类型,而路径则指定部件在程序包中的位置。

下图阐释了此概念:程序包和部件之间的关系类似于应用程序和文件之间的关系,其中,应用程序(程序包)可以包含一个或多个文件(部件),包括:∙编译到本地程序集中的资源文件。

∙编译到所引用的程序集中的资源文件。

∙编译到进行引用的程序集中的资源文件。

∙内容文件。

∙源站点文件。

为了访问这些类型的文件,WPF 支持两种授权:application:/// 和 siteoforigin:///。

Application:/// 授权标识在编译时已知的应用程序数据文件,包括资源文件和内容文件。

Siteoforigin:/// 授权标识源站点文件。

下图显示了每种授权的范围。

注意Pack URI 的授权组件是一个嵌入式 URI,它指向程序包并且必须符合 RFC 2396。

另外,必须用字符“,”替换字符“/”,并且必须对保留字符(如“%”和“?”)进行转义。

有关详细信息,请参见 OPC。

以下各节解释如何将这两种授权与用于标识资源、内容和源站点文件的相应路径结合起来,以便构造pack URIs。

资源文件Pack URI将资源文件配置为 MSBuild Resource 项并将其编译到程序集中。

WPF 支持构造可用于标识资源文件的 Pack URIs,这些资源文件要么编译到本地程序集中,要么编译到从本地程序集引用的程序集中。

本地程序集资源文件编译到本地程序集中的资源文件的 pack URI 使用以下授权和路径:∙授权:application:///。

∙路径:资源文件的名称,包括它的相对于本地程序集项目文件夹根目录的路径。

下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于本地程序集的项目文件夹的根目录中。

pack://application:,,,/ResourceFile.xaml下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于本地程序集的项目文件夹的子文件夹中。

pack://application:,,,/Subfolder/ResourceFile.xaml所引用的程序集资源文件编译到所引用的程序集中的资源文件的 pack URI 使用以下授权和路径:∙授权:application:///。

∙路径:编译到所引用的程序集中的资源文件的名称。

路径必须符合以下格式:程序集短名称[;版本][;公钥];组件/路径o程序集短名称:所引用的程序集的短名称。

o;版本 [可选]:所引用的包含资源文件的程序集的版本。

此部分在加载两个或多个具有相同短名称的所引用的程序集时使用。

o;公钥 [可选]:用于对所引用的程序集进行签名的公钥。

此部分在加载两个或多个具有相同短名称的所引用的程序集时使用。

o;组件:指定所引用的程序集是从本地程序集引用的。

o/路径:资源文件的名称,包括它的相对于所引用程序集的项目文件夹根目录的路径。

下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的根目录中。

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于所引用程序集的项目文件夹的子文件夹中。

pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml下面的示例演示一个 XAML 资源文件的 pack URI,该资源文件位于所引用的、特定于版本的程序集的项目文件夹的根文件夹中。

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml请注意,所引用的程序集资源文件的 pack URI 语法只能与 application:/// 授权一起使用。

例如,WPF 中不支持下面的格式。

pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml内容文件Pack URI内容文件的 pack URI 使用以下授权和路径:∙授权:application:///。

∙路径:内容文件的名称,包括其相对于应用程序的主可执行程序集的文件系统位置的路径。

下面的示例演示一个 XAML 内容文件的 pack URI,该内容文件与可执行程序集位于同一个文件夹中。

pack://application:,,,/ContentFile.xaml下面的示例演示一个 XAML 内容文件的 pack URI,该内容文件位于一个相对于应用程序的可执行程序集的子文件夹中。

pack://application:,,,/Subfolder/ContentFile.xaml注意无法导航到 HTML 内容文件。

URI 方案仅支持导航到位于源站点的 HTML 文件。

源站点Pack URI源站点文件的 pack URI 使用以下授权和路径:∙授权:siteoforigin:///。

∙路径:源站点文件的名称,包括其相对于启动可执行程序集的位置的路径。

下面的示例演示一个 XAML 源站点文件的 pack URI,该源站点文件存储在启动可执行程序集的位置。

pack://siteoforigin:,,,/SiteOfOriginFile.xaml下面的示例演示一个 XAML 源站点文件的 pack URI,该源站点文件存储在相对于启动应用程序的可执行程序集的位置的子文件夹中。

pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml页面文件被配置为 MSBuild Page 项的 XAML 文件按照与资源文件相同的方式编译到程序集中。

因此,可以使用资源文件的 pack URIs 来标识 MSBuild Page 项。

通常被配置为 MSBuild Page 项的 XAML 文件类型将下列元素之一作为它们的根元素:∙System.Windows.Window∙System.Windows.Controls.Page∙System.Windows.Navigation.PageFunction<T>∙System.Windows.ResourceDictionary∙System.Windows.Documents.FlowDocument∙erControl绝对与相对Pack URI完全限定 pack URI 包括方案、授权和路径,它被视为绝对 pack URI。

作为一种针对开发人员的简化形式,XAML 元素通常允许您使用只包含路径的相对 pack URI 来设置相应的特性。

例如,假设本地程序集中的某个资源文件具有以下绝对 pack URI。

pack://application:,,,/ResourceFile.xaml引用此资源文件的相对 pack URI 如下所示。

/ResourceFile.xaml注意因为源站点文件不与程序集相关联,所以只能使用绝对 pack URIs 引用源站点文件。

默认情况下,将相对 pack URI 视为相对于包含引用的标记或代码的位置。

但是,如果使用前导反斜杠,则将相对 pack URI 引用视为相对于应用程序的根目录。

例如,假设有以下项目结构。

App.xamlPage2.xaml\SubFolder+ Page1.xaml+ Page2.xaml如果 Page1.xaml 包含引用“根目录\子文件夹\Page2.xaml”的 URI,则该引用可以使用下面的相对pack URI。

Page2.xaml如果 Page1.xaml 包含引用“根目录\Page2.xaml”的 URI,则该引用可以使用下面的相对 pack URI。

/Page2.xamlPack URI 解析Pack URIs 的格式使得有可能让不同类型的文件的 pack URIs 看起来相同。

例如,假设有以下绝对pack URI。

pack://application:,,,/ResourceOrContentFile.xaml此绝对 pack URI 可以引用本地程序集中的资源文件,也可以引用内容文件。

对于下面的相对 URI 来讲也是如此。

/ResourceOrContentFile.xaml为了确定 pack URI 引用的文件的类型,WPF 使用下面的试探法来解析本地程序集中的资源文件以及内容文件的 URIs:1.探测与 pack URI 匹配的AssemblyAssociatedContentFileAttribute特性的程序集元数据。

相关文档
最新文档