最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# XAML中x:Type的用法詳解

 更新時(shí)間:2025年12月02日 09:50:22   作者:小小8程序員  
x:Type是 XAML 中獲取.NET 類型Type對(duì)象的核心工具,主要用于泛型類型聲明、依賴屬性的 Type 參數(shù)設(shè)置、反射場(chǎng)景的類型傳遞等,本文介紹C# XAML中x:Type的用法,感興趣的朋友跟隨小編一起看看吧

在 C# 與 XAML 的開發(fā)中(如 WPF、UWP、MAUI 等框架),x:Type是 XAML 中的標(biāo)記擴(kuò)展(Markup Extension),用于在 XAML 中表示.NET 類型的Type 對(duì)象,本質(zhì)是將 XAML 中的類型名稱映射為 CLR 的System.Type實(shí)例。它是連接 XAML 聲明式語法與 C# 類型系統(tǒng)的關(guān)鍵工具,以下是其核心用法、場(chǎng)景及注意事項(xiàng)的詳解:

一、x:Type的基本語法

x:Type的語法格式為:

{x:Type [命名空間:]類型名}
  • 命名空間:若類型不在當(dāng)前 XAML 的默認(rèn)命名空間中,需指定命名空間前綴(需先在 XAML 根元素聲明命名空間映射);
  • 類型名:目標(biāo) CLR 類型的名稱(如Button、string、自定義類等)。

示例

<!-- 引用WPF內(nèi)置的Button類型 -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ObjectDataProvider ObjectType="{x:Type Button}" />
</Window>

二、x:Type的核心應(yīng)用場(chǎng)景

1. 指定類型參數(shù)(Type Arguments)

在 XAML 中聲明泛型類型時(shí),需用x:Type指定泛型參數(shù)的類型,常見于List<T>、Dictionary<TKey,TValue>等泛型集合或自定義泛型類。

示例 1:聲明泛型集合

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:col="clr-namespace:System.Collections.Generic;assembly=mscorlib">
    <!-- 聲明List<string>類型的資源 -->
    <col:List x:TypeArguments="{x:Type sys:string}" x:Key="StringList">
        <sys:string>Item1</sys:string>
        <sys:string>Item2</sys:string>
    </col:List>
    <!-- 聲明Dictionary<int, string>類型的資源 -->
    <col:Dictionary x:TypeArguments="{x:Type sys:Int32},{x:Type sys:string}" x:Key="IntStringDict">
        <sys:Int32 x:Key="1">One</sys:Int32>
        <sys:Int32 x:Key="2">Two</sys:Int32>
    </col:Dictionary>
</Window>

示例 2:自定義泛型類

// C#自定義泛型類
public class MyGenericClass<T> {
    public T Value { get; set; }
}
<!-- XAML中實(shí)例化MyGenericClass<string> -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApp"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <local:MyGenericClass x:TypeArguments="{x:Type sys:string}" x:Key="MyGenericInstance">
        <local:MyGenericClass.Value>Hello</local:MyGenericClass.Value>
    </local:MyGenericClass>
</Window>

2. 設(shè)置依賴屬性的 Type 類型值

許多 WPF/UWP 控件的依賴屬性需要接收Type類型的值(如DataTemplateSelectorTargetType、StyleTargetTypeObjectDataProviderObjectType等),此時(shí)需用x:Type指定目標(biāo)類型。

示例 1:Style 的 TargetType

<!-- 為Button類型定義樣式(TargetType需用x:Type指定) -->
<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="LightBlue"/>
    <Setter Property="FontSize" Value="14"/>
</Style>

示例 2:DataTemplate 的 DataType

// C#實(shí)體類
public class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}
<!-- DataTemplate關(guān)聯(lián)Person類型(DataType需用x:Type指定) -->
<DataTemplate DataType="{x:Type local:Person}">
    <StackPanel>
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding Age}"/>
    </StackPanel>
</DataTemplate>

示例 3:ObjectDataProvider 指定對(duì)象類型

<!-- ObjectDataProvider通過ObjectType指定要實(shí)例化的類型 -->
<ObjectDataProvider x:Key="ButtonProvider" ObjectType="{x:Type Button}">
    <ObjectDataProvider.ConstructorParameters>
        <sys:String>Click Me</sys:String>
    </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

3. 類型轉(zhuǎn)換器場(chǎng)景

部分屬性雖聲明為string類型,但實(shí)際需要解析為Type對(duì)象(如XmlnsDefinitionAttribute中的類型映射),此時(shí)x:Type可顯式提供類型信息,避免類型解析錯(cuò)誤。

示例

<!-- 自定義控件的類型映射 -->
<XmlnsDefinition AttributeKey="TypeName" AttributeValue="{x:Type local:MyCustomControl}"/>

4. 反射或動(dòng)態(tài)類型操作

在 XAML 中需動(dòng)態(tài)獲取類型信息(如通過Type參數(shù)調(diào)用靜態(tài)方法、實(shí)例化對(duì)象)時(shí),x:Type是唯一的聲明式方式。

示例

// C#工具類
public static class TypeHelper {
    public static object CreateInstance(Type type) {
        return Activator.CreateInstance(type);
    }
}
<!-- XAML中調(diào)用靜態(tài)方法,傳入Type參數(shù) -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApp">
    
    <ObjectDataProvider ObjectType="{x:Type local:TypeHelper}"
                        MethodName="CreateInstance">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:Person"/> <!-- 傳入Person類型 -->
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</Window>

三、x:Type與typeof的關(guān)系

  • x:Type:XAML 標(biāo)記擴(kuò)展,在 XAML 編譯 / 解析時(shí)轉(zhuǎn)換為typeof(類型)的結(jié)果,生成System.Type實(shí)例;
  • typeof(類型):C# 關(guān)鍵字,直接獲取類型的Type對(duì)象,與x:Type在功能上等價(jià)。

等價(jià)示例:XAML 中的{x:Type Button} ≡ C# 中的typeof(Button)。

四、注意事項(xiàng)

命名空間必須正確映射若類型不在默認(rèn)命名空間(如http://schemas.microsoft.com/winfx/2006/xaml/presentation)中,需先在 XAML 根元素聲明命名空間前綴,例如:

<!-- 映射System命名空間(mscorlib程序集) -->
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<!-- 映射自定義程序集的命名空間 -->
xmlns:local="clr-namespace:MyApp;assembly=MyAppAssembly"

泛型參數(shù)的數(shù)量匹配使用x:TypeArguments時(shí),參數(shù)數(shù)量需與泛型類的類型參數(shù)數(shù)量一致,多個(gè)參數(shù)用逗號(hào)分隔(如{x:Type sys:Int32},{x:Type sys:string})。

值類型與引用類型的區(qū)別x:Type可用于任何 CLR 類型(包括值類型如int、bool,引用類型如string、自定義類),無需特殊處理。

簡(jiǎn)化寫法的場(chǎng)景部分屬性(如Style.TargetType)在 XAML 中有簡(jiǎn)化寫法,可省略x:Type直接寫類型名(編譯器會(huì)自動(dòng)轉(zhuǎn)換):

<!-- 簡(jiǎn)化寫法(等價(jià)于TargetType="{x:Type Button}") -->
<Style TargetType="Button">
</Style>

泛型參數(shù)、非默認(rèn)命名空間的類型必須顯式使用x:Type。

MAUI 中的差異在 MAUI 中,x:Type的用法基本一致,但泛型聲明的語法略有調(diào)整(需用x:TypeArguments且支持更簡(jiǎn)潔的寫法):

<CollectionView.ItemsSource>
    <col:List x:TypeArguments="x:String">
        <x:String>Item1</x:String>
    </col:List>
</CollectionView.ItemsSource>

五、總結(jié)

x:Type是 XAML 中獲取.NET 類型Type對(duì)象的核心工具,主要用于泛型類型聲明、依賴屬性的 Type 參數(shù)設(shè)置、反射場(chǎng)景的類型傳遞等。掌握其用法能讓 XAML 更靈活地與 C# 類型系統(tǒng)交互,尤其在自定義控件、數(shù)據(jù)模板、資源聲明等場(chǎng)景中不可或缺。需注意命名空間映射和泛型參數(shù)的正確性,避免類型解析錯(cuò)誤。

到此這篇關(guān)于C# XAML中x:Type的用法詳解的文章就介紹到這了,更多相關(guān)c#內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中值類型和引用類型的區(qū)別

    C#中值類型和引用類型的區(qū)別

    這篇文章介紹了C#中值類型和引用類型的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Unity實(shí)現(xiàn)單機(jī)游戲每日簽到系統(tǒng)

    Unity實(shí)現(xiàn)單機(jī)游戲每日簽到系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)單機(jī)游戲每日簽到系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#中string用法實(shí)例詳解

    C#中string用法實(shí)例詳解

    這篇文章主要介紹了C#中string用法,非常詳細(xì)的總結(jié)了比較常見的關(guān)于C#中string的幾個(gè)常用方法,需要的朋友可以參考下
    2014-08-08
  • C#判斷字符串中內(nèi)容是否為純數(shù)字的詳細(xì)教程

    C#判斷字符串中內(nèi)容是否為純數(shù)字的詳細(xì)教程

    在進(jìn)行C#編程時(shí)候,有的時(shí)候我們需要判斷一個(gè)字符串是否是數(shù)字字符串,下面這篇文章主要給大家介紹了關(guān)于C#判斷字符串中內(nèi)容是否為純數(shù)字的詳細(xì)教程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • C#異步編程async/await用法詳解

    C#異步編程async/await用法詳解

    本文詳細(xì)講解了C#異步編程async/await的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 基于C#實(shí)現(xiàn)文字轉(zhuǎn)語音功能

    基于C#實(shí)現(xiàn)文字轉(zhuǎn)語音功能

    這篇文章將在C#中集成一個(gè)語音對(duì)象SpeechSynthesizer,可以根據(jù)填入的文字內(nèi)容自動(dòng)解析成語音并使用系統(tǒng)揚(yáng)聲器進(jìn)行語音播報(bào),感興趣的小伙伴可以了解下
    2025-02-02
  • C#測(cè)量程序運(yùn)行時(shí)間及cpu使用時(shí)間實(shí)例方法

    C#測(cè)量程序運(yùn)行時(shí)間及cpu使用時(shí)間實(shí)例方法

    對(duì)一個(gè)服務(wù)器程序想統(tǒng)計(jì)每秒可以處理多少數(shù)據(jù)包,要如何做?答案是用處理數(shù)據(jù)包的總數(shù),除以累記處理數(shù)據(jù)包用的時(shí)間,下面我們看一個(gè)代碼實(shí)例就明白了
    2013-11-11
  • C# Linq讀取XML文件的實(shí)例

    C# Linq讀取XML文件的實(shí)例

    C# Linq讀取XML文件的實(shí)例,需要的朋友可以參考一下
    2013-05-05
  • Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例

    Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例

    這篇文章主要介紹了Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例,包括一次一行地讀取文本文件的方法,需要的朋友可以參考下
    2016-02-02
  • c#實(shí)現(xiàn)萬年歷示例分享 萬年歷農(nóng)歷查詢

    c#實(shí)現(xiàn)萬年歷示例分享 萬年歷農(nóng)歷查詢

    這篇文章主要介紹了c#實(shí)現(xiàn)萬年歷的方法,可以顯示農(nóng)歷、節(jié)氣、節(jié)日、星座、星宿、屬相、生肖、閏年月、時(shí)辰,大家參考使用吧
    2014-01-01

最新評(píng)論

信阳市| 湖北省| 通化县| 富蕴县| 南城县| 清流县| 庆元县| 江门市| 张掖市| 荆门市| 水富县| 吉安市| 南投市| 兴山县| 阿拉尔市| 郧西县| 荣昌县| 敦化市| 开鲁县| 胶州市| 同仁县| 抚宁县| 多伦县| 台前县| 文登市| 区。| 胶南市| 赣州市| 当阳市| 西林县| 施甸县| 裕民县| 博白县| 大田县| 天津市| 科技| 桃园县| 汉川市| 襄垣县| 合江县| 长岛县|