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.pswp.cn/news/377961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377961.shtml
英文地址,請注明出處:http://en.pswp.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 的節點…