手机版本英雄杀旧版本v7每天能刷新多少个英雄

1213人阅读
WPF学习系列(9)
很多书本,博客等对x命名空间详解介绍不是很详细,而且例子也不多,这里就为大家好好介绍一把,XAML2009 主要新功能也介绍一下,不正确之处还请指正。
x命名空间映射的是/winfx/2006/xaml,可以猜测,它包含的类应该与解析XAML语言有关,也称为XAML命名空间。
与C#语言一样,XAML也有自己的编译器。XAML语言会被解析并编译,最终形成微软中间语言存储在程序集中。在解析和编译XAML语言过程中,我们需要告诉编译器一些重要的信息,比如XMAL代码的编译异结果应该和哪个C#代码的编译结果合并、使用XAML声明的元素是public还是private访问级别等等。这些让程序员能够与XAML编译器沟通的工具就存放在x命名空间中。
1.&x命名空间中的Attribute
1.1 x:Class
作用:告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并。
该Attribute只能用于根节点。使用x:Class的根节点的类型要与x:Class的值所指示的类型保持一致。x:Class的值所指示的类型在声明时必须使用partial关键字。
1.2&x:ClassModifier
作用:告诉XAML编译由标签编译生成的类具有怎样的访问控制级别。默认值为public,假如x:Class中所对应的后台代码中的类为internal修饰,则需要使用此Attribute。
.NET 框架 XAML 服务使用中 x:ClassModifier 的值中随不同的编程语言而不同。 C#中, TypeAttributes.Public 和 TypeAttributes.NotPublic 对应public和internal。
1.3 x:Subclass
作用:在同时提供了 x:Class 的情况下,修改 XAML 标记编译行为。不必根据 x:Class 类创建分部类,而是将提供的 x:Class 创建为中间类,然后提供的派生类应基于 x:Class。
x:Subclass 用法主要针对不支持分部类声明的语言。
使用例子:
&Window x:Class=&WpfApplication2.MainWindow&
x:Subclass=&WpfApplication2.MainWindowSub&
xmlns=&/winfx/2006/xaml/presentation&
xmlns:x=&/winfx/2006/xaml&
x:ClassModifier=&internal&
Title=&MainWindow& Height=&350& Width=&525&&
&Label x:Name=&lbl& Content=&123& /&
&/Window&后台代码:
namespace WpfApplication2
internal class MainWindowSub : WpfApplication2.MainWindow
public MainWindowSub()
InitializeComponent();
lbl.Content = &321&;
1.4 x:Name
a. 告诉XAML编译器,当一个标签带有 x:Name 时除了为这个标签生成对应实例外还要为这个实例声明一个引用变量,变量名就是 x:Name 的值。&
b. 将XAML标签所对应对象的Name属性(如果有)也设为x:Name的值,并把这个值注册到UI树上,以便查找。
执行 InitializeComponent 使通过 x:Name /字段名称直接而非必须显式地调用FindName 在任何需要引用 XAML 定义对象的时候可以引用运行时对象图。
x:Name和Name
许多 WPF 应用程序方案都可以完全避免使用 x:Name 特性,因为在默认 XAML 命名空间内为几个重要基类(如 FrameworkElement 和 FrameworkContentElement)指定的 Name 依赖项属性也具有此用途。 当代码在框架级访问具有非 Name 属性的元素时,仍存在一些常见的 XAML 和 WPF 方案。 例如,某些动画和演示图板支持类不支持 Name 属性,但为了控制动画经常需要引用代码。 应当在时间线以及在 XAML 中创建的变换上将 x:Name 指定为属性,前提是您计划以后在代码中引用它们。
1.5 x:FieldModifier
作用:修改 XAML 编译行为。XAML中声明类或其成员的常规访问级别为internal,如需修改为public,需要设置此值。
因为x:FieldModifier是用来改变引用变量访问级别的,所以使用x:FieldModifier的前提是这个标签同时也使用x:Name,不然怎么引用呢?
&StackPanel&
&Label x:Name=&lbl& Content=&123& /&
&Label x:Name=&lbl2& x:FieldModifier=&public& /&
&/StackPanel&效果:其他dll访问时,仅能访问lbl2。
作用:资源中用于检索的索引。(Key-Value模式)
在 XAML 2006 和 WPF 中,必须以特性形式提供 x:Key。 您仍可以使用非字符串键,但这需要标记扩展用法来提供特性窗体中的非字符串值。 如果使用 XAML 2009,则 x:Key 可以被指定为显式支持以对象类型而不是字符串为键的词典而不需要标记扩展中间语言。
注意:在 WPF 中,可以使用 XAML 2009 功能,但仅针对未进行标记编译的 XAML。 WPF 的已编译标记的 XAML 以及 XAML 的 BAML 形式当前不支持 XAML 2009 关键字和功能。
下面用XamlReader来实现XAML2009功能:
string strXaml = &&ResourceDictionary xmlns=\&/winfx/2006/xaml/presentation\&& +
& xmlns:x=\&/winfx/2006/xaml\&& &+
& &Label Content=\&XAML2009\&&&+
&x:String&xaml2009&/x:String&&+
&/x:Key&&+
& &/Label&&+
&&/ResourceDictionary&&;
StringReader strreader = new StringReader(strXaml);
XmlTextReader xmlreader = new XmlTextReader(strreader);
object obj = XamlReader.Load(xmlreader);
this.Resources.MergedDictionaries.Add((ResourceDictionary)obj);XAML中引用:
&Label x:Name=&lbl& Content=&{DynamicResource xaml2009}& /&
1.7 x:Shared
作用:当设置为 false 时,会修改 WPF 资源检索行为,以便特性化资源请求为每个请求创建一个新实例,而不是所有请求共享同一个实例。默认值为true。
举例:在x:Shared=&true&情况下,在多个元素引用某一资源时,如果某一个元素更改了该资源,则其他元素也会跟着修改。
&SolidColorBrush x:Key=&color& x:Shared=&true&
Color=&Red&/&
&SolidColorBrush x:Key=&bcolor& x:Shared=&false&
Color=&Gray&/&引用:
&Label Content=&x:Shared& Foreground=&{DynamicResource color}& Background=&{DynamicResource bcolor}&/&
&Label x:Name=&lblShared& Content=&x:Shared& Foreground=&{DynamicResource color}& Background=&{DynamicResource bcolor}&/&
&Button x:Name=&btn& Content=&更改颜色& Click=&btn_Click&/&
按钮代码:
internal override void btn_Click(object sender, RoutedEventArgs e)
//更改Foreground
SolidColorBrush brush = this.lblShared.Foreground as SolidColorB
brush.Color = Colors.B
//更改Background
brush = this.lblShared.Background as SolidColorB
brush.Color = Colors.Y
点击按钮后
作用:标记元素提供唯一的标识符。 在许多情况下,此唯一标识符由 XAML 本地化过程和工具使用。
详细介绍将在WPF全球化中进行。
2.&x命名空间中的标记扩展
2.1 x:Type
作用:提供 CLR Type 对象,该对象是指定的 XAML 类型的基础类型。
在样式、模板等中指定TargetType或者数据绑定中使用RelativeSource的FindAncestor模式都会用到x:Type。
2.2 x:TypeArguments
作用:将泛型的约束类型参数传递给泛型类型的构造函数。
x:TypeArguments在XAML2006中的限制:
仅有 XAML 文件的根元素可以支持引用泛型类型的泛型 XAML 用法。根元素必须映射到至少具有一个类型参数的泛型类型。 一个示例是 PageFunction&T&。 这些页面函数是用于 WPF 中的 XAML 泛型用法支持的主要方案。用于泛型的根元素 XAML 对象元素必须也使用 x:Class声明一个分部类。 即使定义了 WPF 生成操作,这也为 true。x:TypeArguments 不能引用嵌套的泛型约束。
XAML2009中,可以实例化泛型对象元素,可以支持后备类型系统和对象模型的 XAML 标记中的任何位置处。
XAML2009功能举例:
string strXaml = &&ResourceDictionary xmlns=\&/winfx/2006/xaml/presentation\&& +
& xmlns:x=\&/winfx/2006/xaml\& & +
& xmlns:scg=\&clr-namespace:System.Collections.Gassembly=mscorlib\&& & +
& &scg:List x:Key=\&list\& x:TypeArguments=\&x:String\&&& +
&x:String&XAML2009&/x:String&& +
& &/scg:List&& +
&&/ResourceDictionary&&;
StringReader strreader = new StringReader(strXaml);
XmlTextReader xmlreader = new XmlTextReader(strreader);
object obj = XamlReader.Load(xmlreader);
this.Resources.MergedDictionaries.Add((ResourceDictionary)obj);引用:
&ComboBox ItemsSource=&{DynamicResource list}&/&效果(看下拉框):
2.3 x:Null
作用:将 null 指定为 XAML 成员的值。
x:Null多用于样式等控制,使某些元素的样式不受通用颜色控制等。
2.4 x:Array
作用:通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明。
使用代码示例如下:
&ComboBox&
&ComboBox.ItemsSource&
&x:Array Type=&sys:String&&
&sys:String&XMAL2006&/sys:String&
&/x:Array&
&/ComboBox.ItemsSource&
&/ComboBox&
2.5 x:Static
作用:在XAML文档中使用数据类型为static的成员(包括常量、静态属性、字段或枚举值)。
定义静态字段:
public static string strStatic = &我是静态字段&;引用:
&Label Content=&{x:Static local:MainWindowSub.strStatic}&/&
2.6 x:Reference(XAML2009)
作用:引用在 XAML 标记中其他地方声明的实例。和{Binding ElementName=&...&}的作用类似。
个人发现的区别就是x:Reference能使用于非依赖属性。
注意:x:Reference 是 XAML 2009 中定义的一个构造。在 WPF 中,可以使用 XAML 2009 功能,但仅针对未进行 WPF 标记编译的 XAML。
事实上,x:Reference能在用在进行WPF标记编译的XAML中,带上编译器(VS2013)错误列表会提示“未将对象引用设置到对象的实例。”的错误(因为x:Reference引用的对象在设计的时候还没有实例化),设计界面无效果(如下图),但是能编译成功,运行也是可以的。
&Button x:Name=&btnXAML& Content=&{}{x:Reference}& Style=&{x:Null}& Foreground=&Red&/&
&!--x:Reference与{Binding ElementName=&...&}的区别:x:Reference可以适用于非依赖属性--&
&!--使用--&
&Label Content=&Binding ElementName=&...&&
Foreground=&{Binding ElementName=btnXAML,Path=Foreground}&/&
&Label Content=&使用x:Reference&
Foreground=&{Binding Source={x:Reference btnXAML},Path=Foreground}&/&效果:
3.&XAML指令元素
3.1 x:Code
作用:允许在 XAML 生产内放置代码。
&Window x:Class=&WpfApplication2.Window1&
xmlns=&/winfx/2006/xaml/presentation&
xmlns:x=&/winfx/2006/xaml&
Title=&Window1& Height=&300& Width=&300&&
&StackPanel&
&Button Content=&内置代码& Click=&codeinside&/&
&/StackPanel&
private void codeinside(object sender, System.Windows.RoutedEventArgs e)
MessageBox.Show(&内置代码测试&);
3.2 x:Xdata
作用:x:XData标签是一个专用标签。WPF中把包含数据的对象称为数据源,用于把数据源中的数据提供给数据使用者的对象被称为数据提供者(Data Provider)。WPF类库中包含多种数据提供者,其中有一个类叫XmlDataProvider,专门用于提供XML化的数据。如果想在XAML里声明一个带有数据的XmlDataProvider实例,那么XmlDataProvider实例的数据就要放在x:Xdata 标签的内容里。
定义资源:
&XmlDataProvider x:Key=&InventoryData& XPath=&Inventory/students&&
&Inventory xmlns=&&&
&students&
&Student age=&18&&
&id&01&/id&
&name&小丽&/name&
&/Student&
&Student age=&17&&
&id&02&/id&
&name&小明&/name&
&/Student&
&/students&
&/Inventory&
&/x:XData&
&/XmlDataProvider&
使用资源:
&DataGrid AutoGenerateColumns=&False&&
&DataGrid.ItemsSource&
&Binding Source=&{StaticResource InventoryData}&
XPath=&*[@age&=18] &/&
&/DataGrid.ItemsSource&
&DataGrid.Columns&
&DataGridTextColumn Binding=&{Binding XPath=id}& Header=&代码&/&
&DataGridTextColumn Binding=&{Binding XPath=name}& Header=&名称&/&
&/DataGrid.Columns&
&/DataGrid&效果:
4. XAML2009 中的语言基元
在上面的介绍XAML2009其他功能的时候已经使用到,这里不在举例。
4.1 x:Object
对于 CLR 支持,x:Object 基元对应于 Object。
4.2 x:Boolean
对于 CLR 支持,x:Boolean 基元对应于 Boolean。
XAML 分析 x:Boolean 的值时不区分大小写。 请注意 x:Bool 不是可接受的备选基元。
4.3 x:Char
对于 CLR 支持,x:Char 基元对应于 Char。
4.4 x:String
对于 CLR 支持,x:String 基元对应于 String。
4.5 x:Decimal
对于 CLR 支持,x:Decimal 基元对应于 Decimal。
4.6 x:Single
对于 CLR 支持,x:Single 基元对应于 Single。
除了数值之外,x:Single 的文本语法还允许使用标记 Infinity、-Infinity 和 NaN。 这些标记视为区分大小写。
x:Single 支持采用科学记数法格式的值,条件是文本语法中的第一个字符为 e 或 E。
4.7 x:Double
对于 CLR 支持,x:Double 基元对应于 Double。
除了数值之外,x:Double 的文本语法还允许使用标记 Infinity、-Infinity 和 NaN。 这些标记视为区分大小写。
x:Double 支持采用科学记数法格式的值,条件是文本语法中的第一个字符为 e 或 E。
4.8 x:Int16
对于 CLR 支持,x:Int16 基元对应于 Int16,并且 x:Int16 视为带符号。 在 XAML 中,文本语法中没有加号 (+) 表示是一个带符号的正值。
4.9 x:Int32
对于 CLR 支持,x:Int32 基元对应于 Int32。 x:Int32 视为带符号。 在 XAML 中,文本语法中没有加号 (+) 表示是一个带符号的正值。
4.10 x:Int64
对于 CLR 支持,x:Int64 基元对应于 Int64。 x:Int64 视为带符号。 在 XAML 中,文本语法中没有加号 (+) 表示是一个带符号的正值。
4.11 x:TimeSpan
对于 CLR 支持,x:TimeSpan 基元对应于 TimeSpan。
请注意,时间日期格式的 XAML 分析本质上在 en-US 区域性设置下进行。
4.12 x:Uri
对于 CLR 支持,x:Uri 基元对应于 Uri。
检查协议不是 x:Uri 的 XAML 定义的一部分。
4.13 x:Byte
对于 CLR 支持,x:Byte 基元对应于 Byte。 Byte / x:Byte 视为无符号。
4.14 x:Array
对于 CLR 支持,x:Array 基元对应于 Array。
可以在 XAML 2006 中使用标记扩展语法定义一个数组;而 XAML 2009 语法是语言定义的基元,不需要访问标记扩展。
还有一些WPF中很少用的这里就不做介绍了。
x:Members,x:Member,x:Property等在WF中使用较多。
还有xml:lang,xml:space。
XAML2009中的新指令:x:Arguments,x:FactoryMethod
另外使用一对大括号({})进行转义在WPF基础知识中已经介绍。
注意:在 WPF 中,可以使用 XAML 2009 功能,但仅针对未进行 WPF 标记编译的 XAML。 标记编译的 XAML 以及BAML 形式的 XAML 当前不支持 XAML 2009 关键字和功能。
而x:Reference是个例外,其他的新特征在测试时都是通过XamlReader进行的。
欢迎任何形式的转载,未经作者同意,请保留此段声明!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:25487次
排名:千里之外
原创:17篇
文章:10篇
阅读:11287
(5)(1)(2)(1)(6)(4)
FoolRabbit编程分享如何:使用全局命名空间别名(C# 编程指南)
如何:使用全局命名空间别名(C# 编程指南)
要查看英语原文,请勾选“英语”复选框。也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
如何:使用全局命名空间别名(C# 编程指南)
Visual Studio 2010
命名空间中解析为 TestApp.Console 而不是 Console 类型。
class TestApp
// Define a new class called 'System' to cause problems.
public class System { }
// Define a constant called 'Console' to cause more problems.
const int Console = 7;
const int number = 66;
static void Main()
// The following line causes an error. It accesses TestApp.Console,
// which is a constant.
//Console.WriteLine(number);
由于类 TestApp.System 隐藏了 System 命名空间,因此使用 System.Console 仍然会导致错误:
// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
System.Console.WriteLine(number);
但是,可以通过使用 global::System.Console 避免这一错误,如下所示:
global::System.Console.WriteLine(number);
时,对右侧标识符的搜索将从全局命名空间开始。
例如,下面的声明将 TestApp 作为全局空间的一个成员进行引用。
class TestClass : global::TestApp
显然,并不推荐创建自己的名为 System 的命名空间,您不可能遇到出现此情况的任何代码。
但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。
在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。
在此示例中,命名空间 System 用于包括类 TestClass,因此必须使用 global::System.Console 来引用 System.Console 类,该类被 System 命名空间隐藏。
用于引用命名空间 System.Collections;因此,将使用此别名而不是命名空间来创建
using colAlias = System.C
namespace System
class TestClass
static void Main()
// Searching the alias:
colAlias::Hashtable test = new colAlias::Hashtable();
// Add items to the table.
test.Add("A", "1");
test.Add("B", "2");
test.Add("C", "3");
foreach (string name in test.Keys)
// Searching the global namespace:
global::System.Console.WriteLine(name + " " + test[name]);
此页面有帮助吗?
更多反馈?
1500 个剩余字符
我们非常感谢您的反馈。本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 手游英雄杀好友刷新 的文章

 

随机推荐