首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 筆記:資源與 CLR 命名空間映射 (xmlns:local/clr-namespace)

     編輯:關於.NET

WPF XAML 需將 CLR 命名空間/組件映射為 XML 命名空間,才能在標記中引用自定義類型。本文修正書中過時 `` 處理指令語法,展示現代 `xmlns:prefix="clr-namespace:..."` 標準映射用法,並完整演示資源定義與綁定流程。

現代映射語法 (替代舊版 <?Mapping?>)

<!-- 根元素 Window/Page/UserControl -->
<Window 
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:DataBindingDemo">  <!-- 關鍵映射 -->
  ...
</Window>
  • clr-namespace: 固定前綴,後接 CLR 命名空間名。
  • 若類型在**其他組件**,需加組件名:xmlns:lib="clr-namespace:MyLib;assembly=MyLib"。
  • 映射後,XAML 中即可用 `` 引用該命名空間下的類型。

完整資源定義與綁定流程

1. 定義資料類型 (Code-behind)

namespace DataBindingDemo {
    public class Nickname {
        public string Name { get; set; }
        public string Nick { get; set; }
    }
    public class Nicknames : ObservableCollection<Nickname> { } // 強類型集合
}

2. XAML 定義資源實例並賦值

<Window.Resources>
  <local:Nicknames x:Key="XX">          <!-- 建立集合實例,Key="XX" -->
    <local:Nickname Name="Don" Nick="Naked" />
    <local:Nickname Name="Martin" Nick="Gudge" />
    <local:Nickname Name="Tim" Nick="Stinky" />
  </local:Nicknames>
</Window.Resources>

關鍵:`` 在資源字典中建立一個 `Nicknames` 實例,鍵為 "XX",並透過集合初始化器語法添加三個項目。

3. 綁定資源到 UI (DataContext)

<DockPanel DataContext="{StaticResource XX}"> <!-- 直接綁定資源實例 -->
  <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
    <TextBlock VerticalAlignment="Center">Name: </TextBlock>
    <TextBox Text="{Binding Path=Name}" /> <!-- 綁定當前項目 Name -->
    <TextBlock VerticalAlignment="Center">Nick: </TextBlock>
    <TextBox Text="{Binding Path=Nick}" />
  </StackPanel>
  <Button DockPanel.Dock="Bottom" x:Name="addButton">Add</Button>
  <ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <TextBlock>
          <TextBlock Text="{Binding Path=Name}" />:
          <TextBlock Text="{Binding Path=Nick}" />
        </TextBlock>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</DockPanel>

4. Code-behind 獲取資源實例 (用於邏輯操作)

public partial class Window1 : Window {
    private Nicknames names;
    public Window1() {
        InitializeComponent();
        this.addButton.Click += addButton_Click;
        // 從資源字典獲取同一實例,供後台邏輯操作 (如 Add)
        this.names = (Nicknames)this.FindResource("XX"); 
        // 無需再設定 dockPanel.DataContext,XAML 已綁定
    }
    void addButton_Click(...) { names.Add(new Nickname { Name = "...", Nick = "..." }); }
}

映射關係圖解

命名空間映射關係圖

圖示核心:
CLR Namespace (`DataBindingDemo`) ←映射→ XML Namespace (`local:`) ←使用→ XAML Elements (``)

常見錯誤與避坑

  1. 舊版 Mapping 指令:`` **已廢棄**,請勿使用。
  2. 組件名缺失:跨組件引用必須加 `;assembly=AssemblyName`。
  3. 大小寫敏感:CLR 命名空間區分大小寫,XAML 前綴不區分 (慣用小寫)。
  4. x:Key vs x:Name:資源用 `x:Key`;元素樹節點用 `x:Name` (生成欄位)。

進階:設計時支援

在組件 `AssemblyInfo.cs` 添加:
[assembly: XmlnsDefinition("https://schemas.my.com/ui", "MyNamespace")]
則可在 XAML 直接用 `` 無需 `clr-namespace:`,Visual Studio 設計器智能提示更友好。

掌握 `clr-namespace` 映射,是讓自定義類型進入 XAML 宣告式世界的大門。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved