標籤:style blog http color 使用 strong
- RuntimeNameProperty特性:為什麼<Grid x:Name="grid1"></Grid>等價於<Grid Name="grid1"></Grid>,是因為Grid類使用RuntimeNameProperty特性進行了修飾, RuntimeNameProperty特性指示哪個屬性的值將被做為該類型的執行個體的名稱。
- WPF的類型轉換器:XAML解析器通過以下的兩個方法尋找類型轉換器,如果找不到,XAML解析器就會產生一個錯誤。
1) 檢查屬性申明,尋找TypeConverter特性,如果提供了TypeConverter特性,該特性將指定哪個類可以執行轉換。
2) 如果屬性申明中沒有TypeConverter特性,XAML解析器將檢查對應資料類型的類申明。
- XAML是大小寫敏感的,所以不能使用<button>代替<Button>,但類型轉換器通過不是大小寫敏感的,這意味著 Foreground="White" 和 "Foreground="white"具有相同的效果。
- 標記延伸:所有標記延伸都繼承自System.Windows.Markup.MarkupExtension基類,它提供了一個簡單的ProvideValue()方法,該方法擷取所期望的數值。StaticExtension標記延伸,它允許引用另一個類中的靜態屬性:<Button Foreground="{x:Static SystemColors.ActiveCaptionBrush}">
因為標記延伸映射為類,所以它們也可以被用作嵌套屬性,如:
<Button>
<Button.Foreground>
<x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>
</Button.Foreground>
</Button>
NullExtension:它代表一個null值。
TypeExtension:該擴充構造一個表示.Net類型的對象。
- 附加屬性:它是可以用在多個控制項但是在另一個類中定義的屬性。它根本不是一個真正的屬性,它們實際上被轉換為方法調用,XAML解析器以DefiningType.SetPropertyName()的形式調用靜態方法。
- 如果為元素設定特性:xml:space="preserve",元素內所有空白字元將被保留。<TextBox xml:space="preserve"> jiaoyanq ing</TextBox>
- 在XAML中引用非WPF名稱空間中的類,需要把.net名稱空間映射到一個XML名稱空間:xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName",可以使用任何想要使用的名稱空間首碼Prefix,只要在整個XAML文檔中保持一致即可,但是,sys和local首碼通常在匯入System名稱空間和當前項目名稱空間時使用。
- 使用XamlReader類解析XAML,在以下的程式碼範例中,向Window中載入了一個DockPanel對象,同樣可以載入整個XAML視窗,在這種情況下,必須將XamlReader.Load()方法返回的對象轉換為Window類型,然後為了顯示載入的視窗調用它的Show()方法或ShowDialog()方法。
1 public partial class MainWindow : Window 2 { 3 private Button button1; 4 5 public MainWindow() 6 { 7 InitializeComponent(); 8 } 9 10 public MainWindow(string xamlFile)11 {12 this.Width = this.Height = 285;13 this.Left = this.Top = 100;14 this.Title = "Dynamically Loaded XAML";15 DependencyObject rootElement;16 using (FileStream fs = new FileStream(xamlFile, FileMode.Open))17 {18 rootElement = (DependencyObject)XamlReader.Load(fs);19 this.Content = rootElement;20 }21 //注釋中是另一種替代方法:22 //FrameworkElement frameworkElement = (FrameworkElement)rootElement;23 //button1 = (Button)frameworkElement.FindName("button1");24 button1 = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "button1");25 button1.Click += new RoutedEventHandler(button1_Click);26 }27 28 private void button1_Click(object sender, RoutedEventArgs e)29 {30 button1.Content = "Thank you";31 }32 }View Code