WPF之命名空间和资源
1.参考:
https://msdn.microsoft.com/zh-cn/library/ms747086(v=vs.110).aspx
http://www.cnblogs.com/cww2010/archive/2012/04/30/2476844.html(系统命名空间中的两个参考)
2.默认命名空间
2.1创建一个WPF应用,默认生成代码:
- <Window x:Class="WpfApplication1.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525">
- <Grid>
- </Grid>
- </Window>
第一个声明将整个 WPF 客户端/框架 XAML 命名空间映射为默认命名空间,包含了所有WPF类,包括用来构建用户界面的控件。该名称空间的声明没有使用名称空间前缀,所以它称为整个文档的默认名称空间,除非另行指明,否则每个元素自动位于这个名称空间:
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
第二个声明映射一个单独的 XAML 命名空间,通常将其映射到 x: 前缀。它包含了各种XAML实用特性,这些特性可影响文档的解释方式:
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
命名空间的语法格式:xmlns[:可选的映射前缀]="名称空间"
xmlns后可以跟一个可选的映射前缀,之间用冒号分隔,如果没有写可选映射前缀,则意味着所有来自这个命名空间的标签都不用加前缀,该命名空间称作“默认命名空间”,默认命名空间只能有一个。
2.2系统命名空间:
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xml交互性的命名空间,指明哪些需要处理,哪些可以忽略
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
设计时相关的命名空间
2.3引用自定义类
自定义一个Helper类:
- namespace WpfApplication.Helpers
- {
- public static class PasswordHelper
- {
- //代码块
- }
- }
如果引用的类在同一个Project,只需要添加名字空间:
- xmlns:local="clr-namespace:WpfApplication.Helpers"
使用方法:
- <PasswordBox x:Name="
HorizontalAlignment="Left"- local:PasswordHelper.Attach="True"
- local:PasswordHelper.Password="{Binding Password,Mode=TwoWay}"></PasswordBox>
如果引用的类在另外一个Project,则需要说明Assembly和Namespace
- xmlns:helper="clr-namespace:WpfApplication.Helpers;assembly=WpfApplication"
使用的时候,只需要将local换成helper。
3 程序资源
WPF提供了几个专门使用资源的类,
3.1可以直接使用资源的名称访问资源
方法1:
- 1 <Button Grid.Row="1" Name="down">
- 2 <Image Source="Images/Tulips.jpg"></Image>
- 3 </Button>
方法2:
- 1 <Button Grid.Row="0" Name="up" Click="up_Click">
- 2 <Image Name="img"></Image>
- 3 </Button>
然后在程序中添加资源:
- private void up_Click(object sender, RoutedEventArgs e)
- {
- img.Source = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"));
- }
或者如下(如此可使用相对路径,但注意反斜杠)
- img.Source = new BitmapImage(new Uri("Images/Koala.jpg",UriKind.Relative));
再或者
- img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/Koala.jpg"));
注意:当使用绝对URI时,可使用指向程序集资源的文件路径、用于网络共享的UNC路径、Web站点URL以及pack URI。如果应用程序不能从期望的位置检索到资源,就会产生异常。如果URI是使用XAML设置的,那么会在创建页面时产生异常。
3.2位于其他程序集中的资源
使用packURI还可以检索嵌入到另一个库中的资源(换句话说,在应用程序中使用的DLL程序集中的资源)。这种情况下需要使用以下语法:
- pack://application:,,,/AssemblyName;component/ResourceName
例如,如果图像被嵌入到引用的名为ImageLibrary的程序集中,将需要使用如下URI:
img.Source = new BitmapImage(new Uri("ImageLibrary;component/images/winter.jpg",UriKind.Relative));
如果使用强命名的程序集,可使用包含版本和/或公钥标记的限定程序集引用代替程序集的名称。使用分号隔离每段信息,并在版本号数字之前添加字母v。下面是一个使用版本号的示例:
img.Source = new BitmapImage(new Uri("ImageLibrary;v1.25;component/images/winter.jpg",UriKind.Relative));
下面的示例同时使用了版本号和公钥标记:
img.Source = new BitmapImage(new Uri("ImageLibrary;v1.25;dc642a7f5bd64912;component/images/winter.jpg",UriKind.Relative));
4.绑定
4.1元素到元素的绑定
- <!--元素到元素的绑定:ElementName:指示源元素,Path:指示源元素中的属性-->
- <ControlTemplate Background="{Binding ElementName=MainWindow, Path=Background}" />
元素到元素的绑定:
关键字:Binding
Element:指定的源元素
Path:源元素中的属性
Mode:绑定模式(单向,双向)
4.2绑定到非元素的对象
- <ControlTemplate Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Width}" />
Source:该属性是指向源对象的引用,是提供数据的对象
RelativeSurce:这是引用,使用RelativeSource对象指向源对象。有了这个附加层,可在当前元素(包含绑定表达式的元素)的基础上构建引用。通常用于编写控件模版以及数据模版。
DataContext:如果没有使用Source或RelativeSource属性指定源,WPF就从当前元素开始在元素树中向上查找,检查每个元素的DataContext属性,并使用第一个非空的DataContext属性
4.2.1使用Source属性
绑定到作为资源创建的对象
- <TextBlock Text="{Binding Source={StaticResource CustomFont}, Path=Source}" />
4.2.2使用RelativeSource属性
名称 | 说明 |
FindAncesstor | 表达式绑定到父元素 |
Self | 表达式绑定到同一元素的另一个属性上 |
TemplateParent | 表达式绑定到应用模版的元素。只有绑定位于控件模版或数据模版内部时,这种模式才能工作 |
4.2.3使用DataContext属性
WPF之命名空间和资源的更多相关文章
- WPF笔记(1.8 资源与映射)——Hello,WPF!
原文:WPF笔记(1.8 资源与映射)--Hello,WPF! 终于,看明白了,已经是凌晨1:39分.这本书这一节写得实在是不好,一个local搞得我糊里糊涂,于是,准备按照他的思路,按照我的理解,改 ...
- WPF之神奇的资源
原文:WPF之神奇的资源 WPF中的资源有两种,一种称为"程序集资源"(assembly resource),另一种称为"对象资源"(object resour ...
- (转)WPF控件开源资源
(转)WPF控件开源资源 Textbox Drag/Drop in WPFhttp://www.codeproject.com/Articles/42696/Textbox-Drag-Drop-in- ...
- WPF中静态引用资源与动态引用资源的区别
WPF中静态引用资源与动态引用资源的区别 WPF中引用资源分为静态引用与动态引用,两者的区别在哪里呢?我们通过一个小的例子来理解. 点击“Update”按钮,第2个按钮的文字会变成“更上一层楼”, ...
- WPF控件开源资源
(转)WPF控件开源资源 Textbox Drag/Drop in WPFhttp://www.codeproject.com/Articles/42696/Textbox-Drag-Drop-in- ...
- WPF中引入外部资源
有时候需要在WPF中引入外部资源,比如图片.音频.视频等,所以这个常见的技能还是需要GET到. 第一步:在VS中创建一个WPF窗口程序 第二步:从外部引入资源,这里以引入图片资源为例 1)新建Reso ...
- WPF 精修篇 管理资源字典
原文:WPF 精修篇 管理资源字典 样式太多 每个界面可能需要全局的样式 有没有肯能 WPF 中的样式 像Asp.net中 的CSS一样管理那 有的 有资源字典 BurshDictionary &l ...
- WPF 精修篇 动态资源
原文:WPF 精修篇 动态资源 动态资源 使用 DynamicResource 关键字 静态 就是 StaticResource 原则上是 能用静态就用静态 动态会让前台界面压力很大~ 动态资源引用 ...
- WPF 精修篇 静态资源
原文:WPF 精修篇 静态资源 在WPF中 如果设置好了一个控件样式或者矩形样式 如果Copy出一个新的 那么样式也会双份 比如 下面的矩形 我定义好了一个 Copy 以后 就出现一个新的 但是改变样 ...
随机推荐
- logback logback.xml常用配置详解 <filter>
<filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一.返回DENY,日志将立即被抛弃不再经过其他过滤器:返回NEUTRAL,有序列表 ...
- webpack构建vue项目(再谈配置)
webpack配置起来确实麻烦,这不,之前用刚配好了vue1+的版本,结果在(部分)安卓机上测试,发现存在开启热加载(dev-server)的情况下不能识别vue语法的问题,试了很多方法,都没能很好的 ...
- jQuery--.wrap()方法
1. .wrap()方法:在每个匹配的元素外层包上一个html元素. 2. 有两种使用方法: .wrap(wrappingElement):其中wrappingElement可以是一个HTML片段,选 ...
- ROS中DDNS的使用
一.通过tool fetch更新ddns,关于此命令的使用,参考 tool fetch Scripts中添加脚本/tool fetch url="http://www.51kwl.com/? ...
- React数据流和组件间的沟通总结
今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...
- orcle函数的使用,及其调用
CREATE OR REPLACE Function getBdateT( D_Build date, Q_Date date) return Date as D_Return Date; /*返回的 ...
- cocos2d-x内存管理
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一. 为什么需要内存管理 1. new和delete 2. 堆上申 ...
- 用Python实现多核心并行计算
平常写的程序,无论是单线程还是多线程,大多只有一个进程,而且只能在一个核心里工作.所以很多应用程序即使正在满载运行,在任务管理器中CPU使用量还是只有50%(双核CPU)或25%(四核CPU) 如果能 ...
- javascript 容易忽略的小知识点 new到底做了什么?
问题:平时我们经常写 var ss = new Person():ss就是一个由'Person类'生成的对象了,可是我们的Person方法里却没有写 return: (var ss= Person() ...
- 第2章 ASP.NET MVC(URL、路由及区域)
* { font: 17px/1.5em "Microsoft YaHei" } ASPNET MVC URL.路由及区域 一.URL.路由及区域 一. 配置路由器 1. ...