WPF之命名空間和資源


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM