目錄
?編輯
一、事件處理器知識點
1. XAML中的事件綁定
2. C#中的事件處理方法
3. 方法簽名解釋
4. 命名規范
工作流程
二、導入引用名稱空間
三、x名稱空間及其常用元素
(1)x名稱空間的由來和作用
(2)x名稱空間里都有些什么
1. Attribute(屬性)
2. 標簽擴展
3. XAML指令元素
使用特點
(3)x:ClassModifier
(4)x:Name
使用場景區別
x:Name 的兩個作用
“如果對象有Name屬性,會自動設置為相同的值”是什么意思
為什么要設置Name屬性?
(4)x:FieldModifier
作用:控制XAML中控件生成的C#字段的訪問級別
訪問級別沖突
XAML是聲明性語言,每見到一個標簽聲明一個實例。
每個XAML標簽 = 創建一個對象
舉例說明
XAML代碼(聲明性):
<Grid><Button Content="點擊我"/><TextBox Text="輸入框"/>
</Grid>
等價的C#代碼(命令性):
Grid grid = new Grid(); // <Grid> 創建Grid實例
Button button = new Button(); // <Button> 創建Button實例
button.Content = "點擊我";
TextBox textBox = new TextBox(); // <TextBox> 創建TextBox實例
textBox.Text = "輸入框";grid.Children.Add(button);
grid.Children.Add(textBox);
一、事件處理器知識點
1. XAML中的事件綁定
<Button Click="button1_Click"/>
Click
是事件名button1_Click
是對應的C#方法名- 這樣就把按鈕點擊和后臺方法關聯起來了
2. C#中的事件處理方法
private void button1_Click(object sender, RoutedEventArgs e)
{MessageBox.Show("Hello WPF!");
}
3. 方法簽名解釋
object sender
: 觸發事件的控件(這里是那個Button)RoutedEventArgs e
: 事件相關信息- 返回類型必須是
void
4. 命名規范
- 通常用:
控件名_事件名,比如
button1_Click
工作流程
- 用戶點擊按鈕
- WPF查找
button1_Click
方法 - 執行方法內的代碼
- 顯示消息框
二、導入引用名稱空間
三、x名稱空間及其常用元素
(1)x名稱空間的由來和作用
xmlns:x
是XAML的標準名稱空間聲明x
是約定俗成的前綴名,代表XAML本身的功能- 這個URL
http://schemas.microsoft.com/winfx/2006/xaml
是微軟定義的XAML規范地址
(2)x名稱空間里都有些什么
x名稱空間里的內容分為三大類:
1. Attribute(屬性)
最常用的一類,直接作為屬性使用:
x:Name
- 給控件命名,方便代碼訪問x:Key
- 資源的唯一標識符x:FieldModifier
- 控制字段訪問級別x:Shared
- 控制資源是否共享x:Subclass
- 指定子類x:TypeArguments
- 泛型類型參數x:Uid
- 本地化標識符
2. 標簽擴展
需要用花括號 {}
語法:
x:Null
- 表示空值{x:Null}
x:Static
- 訪問靜態成員{x:Static local:MyClass.StaticProperty}
x:Type
- 獲取類型信息{x:Type Button}
3. XAML指令元素
作為XML元素使用:
x:Code
- 內嵌代碼塊x:XData
- 包裝原始數據
使用特點
- Attribute: 直接寫在標簽上
<Button x:Name="btn1"/>
- 標簽擴展: 用花括號
Value="{x:Static SystemColors.ControlBrush}"
- 指令元素: 作為子元素
<x:Code>...</x:Code>
(3)x:ClassModifier
class modify在編程中是指類修飾符,它主要用于控制類的訪問級別。當類的class modifier設為public時,意味著該類可以從程序集外部訪問;若設為private,則表示該類只能在當前程序集中被訪問,外部無法直接訪問。
(4)x:Name
使用場景區別
1. WPF控件(派生自FrameworkElement)
x:Name="btn1"
和Name="btn1"
效果相同- 一般WPF控件都可以用兩種方式
2. 非WPF控件(不派生自FrameworkElement)
- 只能用
x:Name="xxx"
- 不能用
Name
屬性
x:Name 的兩個作用
1. 聲明引用變量
<Button x:Name="myButton"/>
- 在C#代碼中可以直接用
myButton
訪問這個按鈕 - 變量名就是x:Name的值
2. 設置Name屬性
- 如果對象有Name屬性,會自動設置為相同的值
- 相當于
Name="myButton"
“如果對象有Name屬性,會自動設置為相同的值”是什么意思
XAML代碼:
<Button x:Name="saveButton" Content="保存"/>
WPF自動做了兩件事:
1. 創建C#變量(這個總是會做的)
Button saveButton; // 讓你在C#代碼中可以用saveButton訪問
2. 設置Name屬性(只有控件有Name屬性才會做)
saveButton.Name = "saveButton"; // 把控件本身的Name屬性也設置了
在C#代碼中測試:
private void TestButton()
{// 第1個作用:可以通過變量訪問saveButton.Content = "新內容";// 第2個作用:Name屬性也被設置了MessageBox.Show(saveButton.Name); // 顯示 "saveButton"
}
- 變量名 和 Name屬性值 是同一個字符串
x:Name="abc"
→ 變量名是abc
,控件的Name屬性也是"abc"
為什么要設置Name屬性?
有些WPF功能需要通過Name屬性查找控件:
// 通過Name屬性查找控件
Button found = (Button)this.FindName("saveButton");
簡單說:x:Name既創建了變量,又給控件起了內部名字。
(4)x:FieldModifier
作用:控制XAML中控件生成的C#字段的訪問級別
XAML代碼:
<TextBox x:FieldModifier="private" x:Name="textBox1" .../>
C#代碼:
WindowHappy wh = new WindowHappy();
wh.textBox1.Text = "I'm happy!"; // 這行代碼有問題!
wh.ShowDialog();
訪問級別沖突
x:FieldModifier="private"
生成私有字段- 但C#代碼試圖從外部訪問
wh.textBox1
- private字段不能被外部訪問!