WPF之命名空間和資源

1.參考:html

https://msdn.microsoft.com/zh-cn/library/ms747086(v=vs.110).aspxexpress

http://www.cnblogs.com/cww2010/archive/2012/04/30/2476844.html(系統命名空間中的兩個參考)網絡

 

2.默認命名空間app

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類,包括用來構建用戶界面的控件。該名稱空間的聲明沒有使用名稱空間前綴,因此它稱爲整個文檔的默認名稱空間,除非另行指明,不然每一個元素自動位於這個名稱空間:spa

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

第二個聲明映射一個單獨的 XAML 命名空間,一般將其映射到 x: 前綴。它包含了各類XAML實用特性,這些特性可影響文檔的解釋方式:設計

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

 

命名空間的語法格式:xmlns[:可選的映射前綴]="名稱空間"code

xmlns後能夠跟一個可選的映射前綴,之間用冒號分隔,若是沒有寫可選映射前綴,則意味着全部來自這個命名空間的標籤都不用加前綴,該命名空間稱做「默認命名空間」,默認命名空間只能有一個。component

 

2.2系統命名空間:orm

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屬性

相關文章
相關標籤/搜索