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屬性
轉載于:https://www.cnblogs.com/zzw1986/p/7441237.html
總結
以上是生活随笔為你收集整理的WPF之命名空间和资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51nod 1277 KMP 前缀出现次
- 下一篇: oc79--数组的内存管理