X名称空间(WPF)

笔记简述

    • 闲话
    • x名称空间简要
    • x名称空间的Attribute
    • x名称空间的标签扩展
    • x名称空间的XAML指令元素

 

闲话

本笔记参考与《深入浅出WPF》、MSDN、Some Blog…

MSDN的飞机票点这里。

x名称空间简要

在VS中新建个WpfApplication都会自动生成xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"这么句话,这就是x名称空间了。它包含的类均与解析XAML语言相关。

一下列出x名称空间中包含的工具:

名称种类
x:Array标签扩展
x:ClassAttribute
x:ClassModifierAttribute
x:CodeXAML指令元素
x:FieldModifierAttribute
x:KeyAttribute
x:NameAttribute
x:Null标签扩展
x:ShareAttribute
x:Static标签扩展
x:SubClassAttribute
x:Type标签扩展
x:TypeArgumentsAttribute
x:UidAttribute
x:XDataXAML指令元素

 

x名称空间的Attribute

x:Class

新建的WpfApplication中会有这样的XAML语句:x:Class="WpfApplication.MainWindow"。这是告诉XAML编译器编译的结果需要与后台中的Namespace为WpfApplication和MainWindow-Class结合。

使用x:class要求如下:

  • x:class只能用于根节点;
  • x:class的根节点的类型要与具体的值类型一致;
  • x:class的值的类型声明时必须使用partial关键字。

x:ClassModifier

在创建x:class时候,使用x:ClassModifier可以显示修改XAML编译行为,告诉生成的类具有怎么样的访问控制级别。默认值为Public。

用法:

<object x:Class="namespace.classname" x:ClassModifier="NotPublic">
   ...
</object>

x:Name

首先,必须了解的是XAML是一种声明式语言,XAML标签声明的是对象,对象一般就是控件的实例。在.NET中,一般实例会对应一个引用变量,x:Name就起到了这样的作用。x:Name还有个作用,就是将XAML标签对应的对象Name属性(有的话)也设为x:Name的值。

根据上诉总结,x:Name两个作用:

  1. 为XAML标签声明的实例声明一个引用变量。
  2. 将XAML标签对应的对象的Name属相设为x:Name的值。

Coding一个:

[XMAL]

<StackPanel Margin="10">
    <TextBox x:Name="LiLinsTextBox" Margin="5" Width="100"></TextBox>
    <Button Content="OK" Click="Button_Click" Width="80"></Button>
</StackPanel>

 

[cs]

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrEmpty(LiLinsTextBox.Name))
    {
        MessageBox.Show("No Name");
    }
    else
    {
        MessageBox.Show(LiLinsTextBox.Name);
    }
}

 

RUN:

image

x:FieldModifier

上述中用x:Name声明了引用变量了,既然是变量,那难免会要设置下访问级别。与C#一样,这些变量默认为internal。假如你想跨程序集去访问窗口中元素,这时需要把改窗口元素的引用变量访问级别声明了public。这就用到了x:FieldModifier。

使用方法:(使用前提:存在引用变量,即需要有x:Name。不然没有引用变量咋引用~\(≧▽≦)/~啦啦啦)

<TextBox x:Name="LiLinsTextBox" Margin="5" Width="100" x:FieldModifier="public"></TextBox>

x:Key

看到Key第一眼就想到Key-Value对的形式了。Key的作用就是为资源贴上检索的索引。

用Coding说话:

<Window.Resources>
    <sys:String x:Key="myKey">LiLin is learning WPF.</sys:String>
</Window.Resources>
<StackPanel Margin="10">
    <TextBox Margin="5" Width="120" Text="{StaticResource myKey}"></TextBox>
    <TextBox Margin="5" Width="120" x:Name="btn"></TextBox>
    <Button Content="OK" Click="Button_Click" Width="80"></Button>
</StackPanel>

 

还可以在C#中访问资源:

private void Button_Click(object sender, RoutedEventArgs e)
{
    btn.Text = this.FindResource("myKey") as string;
}

 

Run:

image 

x:Share

x:Share与x:Key结合使用。使用x:Key时是否有这样的疑惑,用Key去多次检索资源中的对象,是否为同一个对象。这时就要x:Share决定了。

当x:Share的值为false时,每次用x:Key去检索这个对象都是不同的,都是这个对象的新副本;设为true,则每次检索到同一个。默认值为true。

x名称空间中的标记扩展

x:Type

x:Type的值应该是一个Type的名称。Type,是指C#中所有数据类型在编程层面上的抽象。当需要在XAML中想表达某个数据类型是就需要用到x:Type了。

Coding:

假设mainWindow中的自定义Button点击想弹出一个自定义的窗口:

先自定义个Button:

public class myButton : Button
{
    public Type MyWindowType { get; set; }
 
    protected override void OnClick()
    {
        base.OnClick();
        Window win = Activator.CreateInstance(this.MyWindowType) as Window;
        if (win != null)
        {
            win.ShowDialog();
        }
    }
}

接着,新建个Window:

<StackPanel Background="AliceBlue" >
    <TextBox Width="100" Margin="5"></TextBox>
    <TextBox Width="100" Margin="5"></TextBox>
    <TextBox Width="100" Margin="5"></TextBox>
</StackPanel>

 

最后在mainWindow中定义自定义Button的实例:

<StackPanel Margin="10">
    <local:myButton Content="Show" Margin="30" MyWindowType="{x:Type TypeName=local:myWindow}"></local:myButton>
</StackPanel>

 

Run:

image

x:Null

类似于C#中的Null,唯一区别就是x:Null用于XAML中吧。

Coding:

<Window.Resources>
    <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
        <Setter Property="Width" Value="50"></Setter>
        <Setter Property="Margin" Value="5"/>
        <Setter Property="Height" Value="20"></Setter>
    </Style>
</Window.Resources>
<StackPanel Margin="10">
    <Button Content="Not Null"></Button>
    <Button Content="Not Null"></Button>
    <Button Content="Null" Style="{x:Null}"></Button>
</StackPanel>

 

Run:

image

x:Array

x:Array是一个类型已知的ArrayList,ArrayList的类型是有x:Array的Type属性确定。

例子:

<Grid Background="LightBlue">
    <ListBox Margin="5">
        <ListBox.ItemsSource>
            <x:Array Type="sys:String">
                <sys:String>LiLin</sys:String>
                <sys:String>Tim</sys:String>
                <sys:String>Tom</sys:String>
            </x:Array>
        </ListBox.ItemsSource>
    </ListBox>
</Grid>

 

x:Static

x:Static作用是使用数据类型中的static成员。

例子:

 

XAML的指令元素

XAML的指令元素有两个

  1. x:Code
  2. x:XData

x:Code的坏处是讲C#的代码写到XAML中来,个人认为不是好处哈。

x:XData是用在:在XAML中使用数据提供者(如XmlDataProvider)提供数据时。

 

以上较详细的将XAML中的x名称空间介绍完了…

转载于:https://www.cnblogs.com/lnetmor/archive/2011/11/23/2260533.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Bresenham和DDA算法画线段

直线&#xff1a;ykxb 为了将他在显示屏上显示出来&#xff0c;我们需要为相应的点赋值&#xff0c;那么考虑到计算机的乘法执行效率&#xff0c;我们肯定不会选择用Ykxb这个表达式求值&#xff0c;然后进行画线段。 我们应当是将它转化为加法运算。 下面提供两种常见的算法&am…

leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析

目录1、106题目2、参考思路&#xff1a;递归切割数组3、105题目4、同样思路的代码1、106题目 2、参考思路&#xff1a;递归切割数组 代码参考&#xff1a;公众号&#xff1a;代码随想录 后序数组中序数组 以 后序数组(左右中)的最后一个元素作为切割点&#xff0c;先切中序数组…

按频率对元素进行排序

Prerequisite: 先决条件&#xff1a; Hashing data structure 散列数据结构 How to write user-defined comparator for priority queue STL in C? 如何在C 中为优先级队列STL编写用户定义的比较器&#xff1f; How to sort a map based on values instead of value? 如何根…

二十、分水岭算法

一、基本原理 分水岭算法主要是基于距离变换&#xff08;distance transform&#xff09;&#xff0c;找到mark一些种子点&#xff0c;从这些种子点出发根据像素梯度变化进行寻找边缘并标记 分水岭&#xff1a;可以简单的理解成一座山&#xff0c;然后来洪水了&#xff0c;水开…

细数WOW里暴雪的“亲儿子”们

. 不知何时&#xff0c;魔兽世界的词汇中忽然出现了一个新玩意&#xff1a;亲儿子。虽说这个称呼现在大多是拿来调侃法爷的&#xff0c;但江山代有儿子出&#xff0c;各领风骚一两天&#xff0c;今天风光无限的法爷们也经历过被其他职业压得抬不起头的小媳妇生涯。那么今天…

Linux下串口ttyS2,ttyS3不能用的问题解决办法

PC104&#xff0c;Xlinux下&#xff0c;突然发现串口3,4不能用。。。 以为是硬件的问题&#xff0c;换成wince后&#xff0c;3,4工作正常&#xff0c;排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at I/O 0x3f8 (irq 4) is a 16550Aserial8250: ttyS1 at I/O 0x2f8 (i…

安卓log.e函数打印示例_log1p()函数以及C ++中的示例

安卓log.e函数打印示例C log1p()函数 (C log1p() function) log1p() function is a library function of cmath header, it is used to get the natural logarithm (the base-e logarithm) of the one plus given value. It accepts a value (float, double, or long double) …

【C++grammar】C++类数据成员的初始化

目录1、类成员的就地初始化example2、构造函数初始化3、默认构造函数&#xff1a;Default Constructor4、举例5、成员的初始化方法的优先级1、类成员的就地初始化example class S { int m 7; // ok, copy-initializes m int n(7); // 错误&#xff1a;不允许用小括号初始化…

二十一、人脸检测

一、识别图像中的人脸 haarcascade_frontalface_alt_tree.xml lbpcascade_frontalcatface.xml GitHub上有Haar级联检测器源代码可自行下载&#xff0c;lbp级联检测器也一样有源码可自行下载 也一样 import cv2 as cv import numpy as npdef face_detect(image):gray cv.cvtC…

aspx特殊符号说明

http://www.cnblogs.com/GnagWang/archive/2010/07/14/1777130.html转载于:https://www.cnblogs.com/mingyongcheng/archive/2011/11/24/2261253.html

javascript运算符_JavaScript中的按位运算符

javascript运算符JavaScript按位运算符 (JavaScript Bitwise Operators) A lot of times you come across some strange operators where youre knocking your head to understand what is going on in the code. Almost all the programming languages have bitwise operators…

[置顶] Android的IPC访问控制设计与实现

3.3.1 IPC钩子函数设计与实现 IPC Binder是Android最重要的进程间通信机制&#xff0c;因此&#xff0c;必须在此实施强制访问控制。 1. 修改secuirty.h 打开终端shell&#xff0c;输入指令“cd /android4.0/kernel/goldfish/include/linux/vim security.h”&#xff0c;找到结…

TensorFlow在Anaconda环境下创建

一、我使用的是Anaconda自带的Jupyter编译器&#xff0c;详细的安装教程可以参考博文 二、之后打开Jupyter 三、进行测试 我的tensorflow使用的是2.0版本 import tensorflow.compat.v1 as tf tf.disable_v2_behavior()a tf.constant([1.0,2.0],name"a") b tf.co…

leetcode 654. 构造最大二叉树 思考分析

题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树&am…

Memcache的命令以及状态监控

输入telnet 127.0.0.1 11211&#xff08;memcached默认端口为11211&#xff09; stats &#xff1a;使用stats命令查看当前memcache服务器的状态 pidmemcache服务器的进程IDuptime服务器已经运行的秒数time服务器当前的unix时间戳versionmemcache版本pointer_size当前操作系统 …

flush python_带有示例的Python File flush()方法

flush python文件flush()方法 (File flush() Method) flush() method is an inbuilt method in Python, it is used to clear/flush the internal buffer, it is best practice while working with fila handling in Python, the internal buffer can be cleared before writin…

c++ 请抛弃匈牙利命名法 - 变量命名代码风格的建议。

我只针对c码农们讲&#xff0c;其他语言不了解不过应该大同小异。曾几何时翻开21天学通c系列等脑残入门书&#xff0c;都以匈牙利命名法示人&#xff08;DWORD dwXXX, int nXXX, string strXXX)。现在我可以负责任的告诉你&#xff0c;把类型名写在前面屁用都没有&#xff0c;对…

Pycharm更换anaconda环境空间

一、File—>Settings 或者直接快捷键 CtrlAltS 二、找到自己的项目—>Project Interpreter—>找到需要使用的anaconda环境空间 三、Add Local 四、G:\Anaconda3\envs\mask_rcnn\python.exe一般anaconda的envs文件夹下&#xff0c;找到你的环境空间名称&#xff0c;…

android 应用demo截图

ksoap2实现天气预报 Frame 动画 baidu map 转载于:https://www.cnblogs.com/java20130726/archive/2011/11/28/3218328.html

leetcode 617. 合并二叉树 思考分析

题目 给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节点…