有極少數的XAML元素存在下面所描述的情況
就是其自身的屬性大多數情況下是在其它的元素中進行聲明和使用的
該元素本身卻很少使用這些屬性
這些在其它元素中聲明和使用的屬性我們稱為附加屬性
一般來說
附加屬性是用於在一個父元素定位其它元素布局的
就像Grid和DockPanel元素就包含附加屬性
Grid使用附加屬性來指定包含子元素的特定行和列
而DockPanel使用附加屬性是來指定子元素應該停靠在面板中的何處位置
提示我們可以在所有的由DependencyObject派生出的元素中設置附加屬性而DependencyObject又是由UIElement派生的所以絕大多數的XAML元素都可以使用附加屬性
我們說過附加屬性是在另外一個元素中進行聲明的
而其本身是屬於所引用的元素
為此它在XAML中的聲明語法為
屬性提供元素名
屬性名
例如
Grid有兩個附加屬性
Row和Column
如果我們要將某個元素包含在Grid的特定區域中
你可以在該元素中使用Grid
Row和Grid
Column兩個屬性附加屬性指定確切的行和列
下面的代碼描述了上述的實現
<Page xmlns=
WindowTitle=
GridSample
>
<Grid VerticalAlignment=
Top
HorizontalAlignment=
Left
ShowGridLines=
True
Width=
Height=
>
<Grid
ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid
ColumnDefinitions>
<Grid
RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid
RowDefinitions>
<TextBlock FontSize=
FontWeight=
Bold
Grid
ColumnSpan=
Grid
Row=
>
Products Shipped
</TextBlock>
<TextBlock FontSize=
FontWeight=
Bold
Grid
Row=
Grid
Column=
>
Quarter
</TextBlock>
<TextBlock FontSize=
FontWeight=
Bold
Grid
Row=
Grid
Column=
>
Quarter
</TextBlock>
<TextBlock FontSize=
FontWeight=
Bold
Grid
Row=
Grid
Column=
>
Quarter
</TextBlock>
<TextBlock Grid
Row=
Grid
Column=
>
</TextBlock>
<TextBlock Grid
Row=
Grid
Column=
>
</TextBlock>
<TextBlock Grid
Row=
Grid
Column=
>
</TextBlock>
<TextBlock FontSize=
FontWeight=
Bold
Grid
ColumnSpan=
Grid
Row=
>
Total Units:
</TextBlock>
</Grid>
</Page>
最終的呈現效果如下
綁定屬性
在ASPNET中我們通常使用<%# 數據表達式%>這樣的語法創建服務器控件屬性和數據源之間的綁定那麼要在WPF中創建一個XAML元素的屬性和數據源之間的綁定應該怎麼實現呢?為此我們引入了一種新的概念-綁定屬性我們可以在一個元素中使用綁定屬性去引用原本屬於其它元素的屬性值這個包含綁定屬性的元素稱為目標元素而被引用的那個元素稱為源元素注意綁定屬性必須和目標元素的從屬屬性相關聯 我們在目標元素中使用綁定屬性來綁定源元素的相應屬性值如果源元素中的相應屬性值在程序運行時發生了變化那麼目標元素中的從屬屬性的屬性值也將做出同樣改變也就說綁定屬性會自動解析所綁定的屬性值是否發生了變化並將發生的改變馬上反饋到從屬屬性中在學習C#時我們通常會使用如下的代碼來說明賦值的意義
int a =
;
int b;
b = a;
其中變量a就相當於我們上述的源元素那樣
其值為
而變量b就相當於目標元素那樣
通過語句
b=a
將值
綁定
到b
使得變量b的值現在也為
但是它和實際的WPF程序中的綁定語法不同的是
當a的值發生改變後
b的值是不會發生改變的
依然為
而WPF中的綁定語法會根據源元素的屬性值改變做出同樣的響應
這種關聯是一直持續的
在XAML中是使用Binding關鍵字來維續它們的一致性
Binding元素的語法如下
<Binding ElementName[元素名]=
…
Path[屬性名]=
…
/>
我們用Binding關鍵字來表明這是一個綁定表達式語法
使用這種語法的實現都會在運行階段進行實時的解析
以獲得源元素的當前值
在前面我們曾經創建了一個實例
就是你點擊了多少次按鈕
就會在按鈕上的文本進行呈現
現在我們來使用綁定屬性來擴展這個示例
我們可以為該頁面添加一個TextBox元素
使得文本框中文本和一個TextBlock元素上的文本一致
也就是說將TextBox元素的Text屬性和TextBlock元素的Text屬性進行綁定
當你點擊按鈕時
就使得上述的兩個文本信息同時發生變化
並且文本信息會顯示改變的次數
<Window
xmlns=
xmlns:x=
x:Class=
SDKSample
Window
Width=
Height=
Title=
BindDPtoDP
>
<DockPanel Background=
White
>
<Button Click=
btnChangeSource
Width=
Height=
DockPanel
Dock=
Top
>Change Source Property</Button>
<TextBlock Name=
Text
DockPanel
Dock=
Top
FontSize=
Height=
Foreground=
Green
>
<TextBlock
Text>
Click the Button to Change this Initial Text Value in this Source Element
</TextBlock
Text>
</TextBlock>
<TextBox DockPanel
Dock=
Top
Height=
Foreground=
Blue
>
<TextBox
Text>
<Binding ElementName=
Text
Path=
Text
/>
</TextBox
Text>
</TextBox>
</DockPanel>
</Window>
在第
行代碼處
可以看到我們在<TextBox
Text>從屬屬性中使用了綁定表達式語法來綁定TextBlock元素的Text屬性
對應的代碼後置文件
using System;
using System
ComponentModel;
using System
Windows;
using System
Windows
Controls;
using System
Windows
Documents;
using System
Windows
Data;
using System
Windows
Media;
namespace SDKSample
{
/// <summary>
/// Window
: This is the class that encapsulates the code
///
behind
the Window
Xaml page
/// </summary>
public partial class Window
: Window
{
static int iCount =
;
void btnChangeSource(object sender
RoutedEventArgs e)
{
iCount++;
Text
Text = string
Format(
New Text
Count={
}
iCount);
}
}
}
效果下圖所示
只要你點擊按紐
TextBox元素的Text屬性值和TextBlock元素的Text屬性值都將發生變化
From:http://tw.wingwit.com/Article/program/net/201311/11493.html