一,XAML基礎

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

  1. RuntimeNameProperty特性:為什麼<Grid x:Name="grid1"></Grid>等價於<Grid Name="grid1"></Grid>,是因為Grid類使用RuntimeNameProperty特性進行了修飾,  RuntimeNameProperty特性指示哪個屬性的值將被做為該類型的執行個體的名稱。
  2. WPF的類型轉換器:XAML解析器通過以下的兩個方法尋找類型轉換器,如果找不到,XAML解析器就會產生一個錯誤。
    1)  檢查屬性申明,尋找TypeConverter特性,如果提供了TypeConverter特性,該特性將指定哪個類可以執行轉換。
    2)  如果屬性申明中沒有TypeConverter特性,XAML解析器將檢查對應資料類型的類申明。
  3. XAML是大小寫敏感的,所以不能使用<button>代替<Button>,但類型轉換器通過不是大小寫敏感的,這意味著 Foreground="White" 和 "Foreground="white"具有相同的效果。
  4. 標記延伸:所有標記延伸都繼承自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類型的對象。
  5. 附加屬性:它是可以用在多個控制項但是在另一個類中定義的屬性。它根本不是一個真正的屬性,它們實際上被轉換為方法調用,XAML解析器以DefiningType.SetPropertyName()的形式調用靜態方法。
  6. 如果為元素設定特性:xml:space="preserve",元素內所有空白字元將被保留。<TextBox xml:space="preserve"> jiaoyanq  ing</TextBox>
  7. 在XAML中引用非WPF名稱空間中的類,需要把.net名稱空間映射到一個XML名稱空間:xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName",可以使用任何想要使用的名稱空間首碼Prefix,只要在整個XAML文檔中保持一致即可,但是,sys和local首碼通常在匯入System名稱空間和當前項目名稱空間時使用。
  8. 使用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

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.