1.參考:
https://msdn.microsoft.com/zh-cn/library/ms747086(v=vs.110).aspx
http://www.cnblogs.com/cww2010/archive/2012/04/30/2476844.html(系統命名空間中的兩個參考)
2.默認命名空間
2.1創建一個WPF應用,默認生成代碼:
1 <Window x:Class="WpfApplication1.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 Title="MainWindow" Height="350" Width="525"> 5 <Grid> 6 7 </Grid> 8 </Window>
第一個聲明將整個 WPF 客戶端/框架 XAML 命名空間映射為默認命名空間,包含了所有WPF類,包括用來構建用戶界面的控件。該名稱空間的聲明沒有使用名稱空間前綴,所以它稱為整個文檔的默認名稱空間,除非另行指明,否則每個元素自動位於這個名稱空間:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
第二個聲明映射一個單獨的 XAML 命名空間,通常將其映射到 x: 前綴。它包含了各種XAML實用特性,這些特性可影響文檔的解釋方式:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
命名空間的語法格式:xmlns[:可選的映射前綴]="名稱空間"
xmlns后可以跟一個可選的映射前綴,之間用冒號分隔,如果沒有寫可選映射前綴,則意味着所有來自這個命名空間的標簽都不用加前綴,該命名空間稱作“默認命名空間”,默認命名空間只能有一個。
2.2系統命名空間:
1 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xml交互性的命名空間,指明哪些需要處理,哪些可以忽略
1 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
設計時相關的命名空間
2.3引用自定義類
自定義一個Helper類:
1 namespace WpfApplication.Helpers 2 { 3 public static class PasswordHelper 4 { 5 //代碼塊 6 } 7 }
如果引用的類在同一個Project,只需要添加名字空間:
xmlns:local="clr-namespace:WpfApplication.Helpers"
使用方法:
1 <PasswordBox x:Name="txtPassword" Grid.Row="2" Grid.Column="2" Width="150"
HorizontalAlignment="Left" 2 local:PasswordHelper.Attach="True" 3 local:PasswordHelper.Password="{Binding Password,Mode=TwoWay}"></PasswordBox>
如果引用的類在另外一個Project,則需要說明Assembly和Namespace
1 xmlns:helper="clr-namespace:WpfApplication.Helpers;assembly=WpfApplication"
使用的時候,只需要將local換成helper。
3 程序資源
WPF提供了幾個專門使用資源的類,
3.1可以直接使用資源的名稱訪問資源
方法1:
1 <Button Grid.Row="1" Name="down"> 2 <Image Source="Images/Tulips.jpg"></Image> 3 </Button>
方法2:
1 <Button Grid.Row="0" Name="up" Click="up_Click"> 2 <Image Name="img"></Image> 3 </Button>
然后在程序中添加資源:
1 private void up_Click(object sender, RoutedEventArgs e) 2 { 3 img.Source = new BitmapImage(new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg")); 4 }
或者如下(如此可使用相對路徑,但注意反斜杠)
img.Source = new BitmapImage(new Uri("Images/Koala.jpg",UriKind.Relative));
再或者
img.Source = new BitmapImage(new Uri("pack://application:,,,/Images/Koala.jpg"));
注意:當使用絕對URI時,可使用指向程序集資源的文件路徑、用於網絡共享的UNC路徑、Web站點URL以及pack URI。如果應用程序不能從期望的位置檢索到資源,就會產生異常。如果URI是使用XAML設置的,那么會在創建頁面時產生異常。
3.2位於其他程序集中的資源
使用packURI還可以檢索嵌入到另一個庫中的資源(換句話說,在應用程序中使用的DLL程序集中的資源)。這種情況下需要使用以下語法:
pack://application:,,,/AssemblyName;component/ResourceName
例如,如果圖像被嵌入到引用的名為ImageLibrary的程序集中,將需要使用如下URI:
img.Source = new BitmapImage(new Uri("ImageLibrary;component/images/winter.jpg",UriKind.Relative));
如果使用強命名的程序集,可使用包含版本和/或公鑰標記的限定程序集引用代替程序集的名稱。使用分號隔離每段信息,並在版本號數字之前添加字母v。下面是一個使用版本號的示例:
img.Source = new BitmapImage(new Uri("ImageLibrary;v1.25;component/images/winter.jpg",UriKind.Relative));
下面的示例同時使用了版本號和公鑰標記:
img.Source = new BitmapImage(new Uri("ImageLibrary;v1.25;dc642a7f5bd64912;component/images/winter.jpg",UriKind.Relative));
4.綁定
4.1元素到元素的綁定
1 <!--元素到元素的綁定:ElementName:指示源元素,Path:指示源元素中的屬性--> 2 <ControlTemplate Background="{Binding ElementName=MainWindow, Path=Background}" />
元素到元素的綁定:
關鍵字:Binding
Element:指定的源元素
Path:源元素中的屬性
Mode:綁定模式(單向,雙向)
4.2綁定到非元素的對象
1 <ControlTemplate Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Width}" />
Source:該屬性是指向源對象的引用,是提供數據的對象
RelativeSurce:這是引用,使用RelativeSource對象指向源對象。有了這個附加層,可在當前元素(包含綁定表達式的元素)的基礎上構建引用。通常用於編寫控件模版以及數據模版。
DataContext:如果沒有使用Source或RelativeSource屬性指定源,WPF就從當前元素開始在元素樹中向上查找,檢查每個元素的DataContext屬性,並使用第一個非空的DataContext屬性
4.2.1使用Source屬性
綁定到作為資源創建的對象
1 <TextBlock Text="{Binding Source={StaticResource CustomFont}, Path=Source}" />
4.2.2使用RelativeSource屬性
名稱 | 說明 |
FindAncesstor | 表達式綁定到父元素 |
Self | 表達式綁定到同一元素的另一個屬性上 |
TemplateParent | 表達式綁定到應用模版的元素。只有綁定位於控件模版或數據模版內部時,這種模式才能工作 |
4.2.3使用DataContext屬性