精华内容
下载资源
问答
  • XAML
    千次阅读
    2018-10-30 21:30:49

    什么是XAML命名空间?

    XAML命名空间实际上是XML命名空间概念的扩展。指定XAML命名空间的技术依赖于XML命名空间语法,使用URI作为命名空间标识符的约定,使用前缀提供从同一标记源引用多个命名空间的方法,等等.XML命名空间被添加到XAML定义主要概念是,XAML命名空间游戏所有既。标记用法英语谚语英语谚语的唯一性范围,影响也。标记实体可能由特定CLR空间命名引用状语从句:程序的集请立即获取的iTunes的方式。后一种考虑也受到XAML模式上下文概念的影响。但是出于WPF如何使用XAML命名空间的目的,您通常可以根据默认的XAML命名空间(XAML语言命名空间)来考虑XAML命名空间,

    WPF XAML和命名空间声明

    在许多XAML文件的根标记中的名称空间声明中,您将看到通常有两个XML名称空间声明。第一个声明将整个WPF客户端/框架XAML命名空间映射为默认名称:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    第二个声明映射一个单独的XAML命名空间,将其(通常)到映射  x:前缀。

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    声明这些的之间关系的英文   前缀映射请| |立即iTunes中的电子杂志XAML作为语言定义一部分的内在函数,而WPF是一种使用XAML作为语言并为XAML定义其对象的词汇表的实现因为WPF词汇表的用法比XAML内在函数用法更常见,所以WPF词汇表被映射为默认词汇表。 x:

    x: 映射XAML语言内在函数支持的前缀约定后面是项目模板,示例代码以及此SDK中语言功能的文档.XAML命名空间定义了许多常用功能,即使对于基本WPF应用程序也是如此。例如,为了通过部分类将任何后台代码连接到XAML文件,将该必须类命名为  x:Class  相关XAML文件的根元素中的属性。或者,希望您作为键控资源访问的XAML页面中定义的任何元素都应该 

     

    映射到自定义类和程序集

    您可以使用xmlns 前缀声明中的一系列标记将XML名称空间映射到程序集,类似于标准WPF和XAML-intrinsics XAML名称空间映射到前缀的方式。一系列前缀声明标记将XML名称空间映射到程序集,类似于标准WPF和XAML的内在(XAML-内联函数)XAML名称空间映射到前缀的方式。

    语法采用以下可能的命名标记和以下值:

    clr-namespace: 在程序集中声明的CLR名称空间,其中包含要公开为元素的公共类型。

    assembly= 包含部分或全部引用的CLR命名空间的程序集。此值通常只是程序集的名称,而不是路径,并且不包括扩展名(例如的.dll文件或压缩的.exe)。必须在包含您要映射的XAML的项目文件中将该程序集的路径建立为项目引用。为了合并版本控制和强名称签名,该  assembly 值可以的英文的AssemblyName定义的字符串,而不是简单的字符串名称。

    请注意,将clr-namespace 标记与其值分隔的字符的英文冒号(:),而将assembly 标记与其值分隔的字符的英文等号(=)。这两个令牌之间使用的字符是分号。此外,请勿在声明中的任何位置包含任何空格。

    例子:后台代码如下

    namespace SDKSample {  
        public class ExampleClass : ContentControl {  
            public ExampleClass() {  
            ...  
            }  
        }  
    } 

    则在XAML文件中应该这么定义

    xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"

    映射到当前程序集

    assembly :如果clr-namespace 引用的英文在与引用自定义类的应用程序代码相同的程序集中定义的,则可以省略   或者,此情况的等效语法是指定。  assembly=,在等号后面没有字符串标记。

    如果在同一程序集中定义,则自定义类不能用作页面的根元素部分类不需要映射。如果您打算将它们作为XAML中的元素引用,则只需要映射不是应用程序中页面的部分类的类。

    将CLR命名空间映射到程序集中的XML命名空间

    WPF定义了XAML处理器使用的CLR属性,以便将多个CLR命名空间映射到单个XAML命名空间。此属性XmlnsDefinitionAttribute被放置在生成程序集的源代码中的程序集级别WPF程序集源代码使用此属性将各种常见名称空间(如System.Windows程序状语从句:System.Windows.Controls)映射到http://schemas.microsoft.com/winfx/2006/xaml/presentation名称空间

    XmlnsDefinitionAttribute需要两个参数:XML / XAML命名空间名称和CLR命名空间的名称。不止一个XmlnsDefinitionAttribute可以存在多个CLR命名空间映射到相同的XML命名空间。一旦映射,如果需要,通过using在部分类代码隐藏页面中提供适当的语句,可以也。在没有完全限定的情况下引用这些命名空间的成员。有关更多详细信息,请参阅XmlnsDefinitionAttribute

    XAML模板的名称空间和其他前缀

    如果您正在使用WPF XAML的开发环境和/或设计工具,您可能会注意到XAML标记中还有其他已定义的XAML命名空间/前缀。

    Visual Studio的WPF Designer使用通常映射到前缀的设计器命名空间d: .WPF的最新项目模板可能预先映射此XAML命名空间,以支持在Visual Studio的WPF Designer和其他设计环境之间交换XAML。此设计XAML命名空间用于在设计器中往返基于XAML的UI时保持设计状态。它还用于诸如d:IsDataSource在设计器中启用运行时数据源的功能。

    您可能会看到映射的另一个前缀是mc:mc:用于标记兼容性,并且正在利用不一定特定于XAML的标记兼容性模式。在某种程度上,标记兼容性柯林斯功能用于在框架之间或跨支持实现的其他边界交换XAML,在XAML模式上下文之间工作,为设计器中的有限模式提供兼容性等。有关标记兼容性概念及其与WPF的关系的更多信息,请参阅  标记兼容性( mc :)语言功能

    WPF和装配加载

    WPF XAML的模式上下文与WPF应用程序模型集成,后者又使用CLR定义的AppDomain的概念。以下序列描述了XAML架构上下文如何根据WPF对AppDomain中的使用和其他因素来解释如何在运行时或设计时加载程序集或查找类型。

    1. 迭代AppDomain,从最近加载的程序集开始,查找已经加载的程序集,该程序集匹配名称的所有方面。

    2. 如果名称是限定的,则在限定名称上调用Assembly.Load(String)

    3. 如果限定名称的短名称+公钥标记与从中加载标记的程序集匹配,则返回该程序集。

    4. 使用短名称+公章标记来调用Assembly.Load(String)

    5. 如果名称不合格,请调用Assembly.LoadWithPartialName

    松散的XAML不使用第3步; 没有加载程序集。

    编译的WPF XAML(通过XamlBuildTask生成)不使用AppDomain中已加载的程序集(步骤1)。此外,名称永远不应该从XamlBuildTask输出中取消资格,因此步骤5不适用。

    编译的BAML(通过PresentationBuildTask生成)使用所有步骤,但BAML也不应包含不合格的程序集名称。

     

    加载的XAML应用程序中的名称范围

    在更广泛的编程或计算机科学上下文中,编程概念通常包括可用于访问对象的唯一标识符或名称的原理。对于使用标识符或名称的系统,名称范围定义了如果请求该名称的对象,或者强制执行标识名称唯一性的边界,进程或技术将在其中搜索的边界。这些一般原则适用于XAML名称范围。在WPF中,在加载页面时,在XAML页面的根元素上创建XAML名称范围。从页面根开始的XAML页面中指定的每个名称都将添加到相关的XAML名称范围。

    在WPF XAML中,作为公共根元素(例如窗口)的元素始终控制XAML名称范围。如果诸如FrameworkElement的FrameworkContentElement上之类的元素是标记中页面的根元素,则XAML处理器会隐式添加  根,以便页面可以提供有效的XAML名称范围。

     注意:

    即使没有在XAML中标记的任何元素上定义属性Namex:Name属性,WPF构建操作也会为XAML生成创建XAML名称范围。

    如果您尝试在任何XAML名称范围内使用相同的名称两次,则会引发异常。对于具有代码隐藏并且是已编译应用程序一部分的WPF XAML,在初始标记编译期间为页面创建生成的类时,WPF构建操作会在构建时引发异常。对于未通过任何构建操作进行标记编译的XAML,可能会在加载XAML时引发与XAML名称范围问题相关的异常.XAML设计人员也可能在设计时预见到XAML名称范围问题。

    将对象添加到运行时对象树

    WPAM XAML名称范围的时刻。如果在解析生成该树的XAML之后的某个时间点向对象树添加对象,则新对象上的值Namex:Name值不会自动更新XAML范围中的信息。要在加载XAML后将对象的名称添加到WPF XAML名称范围中,必须在定义XAML名称范围的对象上调用RegisterName的相应实现,该对象通常是XAML页根。如果未注册名称,则无法通过FindName等方法按名称引用添加的对象,并且不能将该名称用于动画定位。

    应用程序开发人员最常见的情况是,您将使用RegisterName将名称RegisterName到页面当前根目录的XAML名称范围中。RegisterName是针对动画对象的故事板的重要场景的一部分。有关更多信息,请参阅故事板- 观察

    如果在除定义XAML名称范围的对象之外的对象上调用RegisterName,则该名称仍会在XAML名称范围内注册,调用对象将保留在该名称范围内,就像您在XAML名称范围定义对象上调用了RegisterName一样。

    代码中的XAML Namescopes

    您可以在代码中创建并使用XAML名称范围。即使对于纯代码使用,XAML名称范围创建中涉及的API和概念也是相同的,因为WPF XAML的处理器在处理XAML本身时使用这些API和概念概念。和API的存在主要是为了能够在对象树中按名称查找对象,该对象树通常部分或完全在XAML中定义。

    对于以编程方式而非加载的XAML创建的应用程序,定义XAML名称范围的对象必须实现INameScope,或者是FrameworkElementFrameworkContentElement派生类,以支持在其实例上创建XAML名称范围。

    此外,对于未由XAML处理器加载和处理的任何元素,默认情况下不会创建或初始化对象的XAML名称范围。您必须为随后要将名称注册到的任何对象显式创建新的XAML名称范围。要创建XAML名称范围,请调用静态SetNameScope方法。将指定其作为dependencyObject参数拥有的对象,并将新的名称范围构造函数调用作为value参数。

    如果dependencyObjectSetNameScope提供的对象不是INameScope实现,FrameworkElementFrameworkContentElement在任何子元素上调用RegisterName都不起作用。如果您未能显式创建新的XAML名称范围,则对RegisterName的调用将引发异常。有关在代码中使用XAML namescope API的示例,请参见定义名称范围

    样式和模板中的XAML名称范围

    WPF中的样式和模板提供了以直接方式重用和重新应用内容的能力。但是,样式和模板也可能包含在模板级别定义的XAML名称的元素。可以在页面中多次使用相同的模板。因此,样式和模板都定义了自己的XAML名称范围,与应用样式或模板的对象树中的任何位置无关

    请考虑以下示例:

    <Page
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      >
      <Page.Resources>
        <ControlTemplate x:Key="MyButtonTemplate" TargetType="{x:Type Button}">
          <Border BorderBrush="Red" Name="TheBorder" BorderThickness="2">
            <ContentPresenter/>
          </Border>      
        </ControlTemplate>
      </Page.Resources>
      <StackPanel>
        <Button Template="{StaticResource MyButtonTemplate}">My first button</Button>
        <Button Template="{StaticResource MyButtonTemplate}">My second button</Button>
      </StackPanel>
    </Page>

    这里,相同的模板应用于两个不同的按钮。如果模板没有不同的XAML  TheBorder名称范围,则模板中使用的名称将导致XAML名称范围中的名称冲突。模板的每个实例都有自己的XAML名称范围,因此在本例中,每个实例化模板的XAML名称范围只包含一个名称。

    样式还定义了自己的XAML名称范围,主要是为了使故事板的某些部分可以分配特定的名称。这些名称启用控制特定行为,这些行为将定位该名称的元素,即使模板已重新定义为控件自定义的一部分。

    由于单独的XAML名称范围,在模板中查找命名元素比在页面中查找非模板化命名元素更具挑战性。首先需要通过获取应用模板的控件的模板属性值来确定应用的模板。然后,调用FindName的模板版本,将应用模板的控件作为第二个参数传递

    如果您是控件作者,并且您约定,通过控件本身定义,则可以使用控件实现代码中的GetTemplateChild方法。该GetTemplateChild方法是受保护的,因此只有控件作者才能访问它。

    如果您在模板中工作,并且需要访问应用模板的XAML名称范围,请获取TemplatedParent的值,然后在那里调用FindName。在模板中工作的一个示例是,如果您正在编写事件处理程序实现,其中将从应用模板中的元素引发事件。

    FrameworkElement具有FindNameRegisterNameUnregisterName方法。如果您调用这些方法的对象拥有XAML名称范围,则这些方法将调用相关XAML名称范围的方法。否则,检查父元素以查看它是否拥有XAML名称范围,并且此过程以递归方式继续,直到找到XAML名称范围(由于XAML处理器行为,保证在根处有XAML名称范围)FrameworkContentElement上具有类似的行为,但FrameworkContentElement上没有XAML名称范围。这些方法存在于FrameworkContentElement上上,因此最终可以将调用转发到FrameworkElement的父元素。

    SetNameScope用于将新的XAML名称范围映射到现有对象。您可以多次调用SetNameScope以重置或清除 XAML名称范围,但这不是常见用法。此外,GetNameScope通常不会从代码中使用。

    XAML Namescope实现

    以下类直接实现INameScope

    ResourceDictionary中不使用XAML名称或名称范围; 使用键代替,因为它是一个字典实现。ResourceDictionary中实现INameScope的唯一原因的英文它可以引发用户代码的异常,这有助于阐明真正的XAML名称范围与ResourceDictionary中如何处理密钥之间的区别,并确保XAML名称范围不会通过父元素应用于ResourceDictionary

    FrameworkTemplateStyle通过显式接口定义实现INameScope。显示实现允许这些XAML名称范围在通过INameScope接口访问时按常规行为,这是WPF内部进程传送XAML名称范围的方式。但是显式接口定义不是FrameworkTemplateStyle的传统API表面的一部分,因为您很少需要直接在FrameworkTemplateStyle上调用INameScope方法,而是使用其他API,例如GetTemplateChild

    以下类通过使用System.Windows.NameScope帮助程序类并通过NameScope.NameScope附加属性连接到其XAML名称范围实现来定义自己的XAML名称范围:

    内联样式和模板

    Windows Presentation Foundation(WPF)提供Style对象和模板对象(FrameworkTemplate子类),作为定义资源中元素的可视外观的方法,以便可以多次使用它们。因此,XAML中采用StyleFrameworkTemplate类型的属性几乎总是对现有样式和模板进行资源引用,而不是内联定义新内容。

    内联样式和模板的限制

    在可扩展应用程序标记语言(XAML)中,样式和模板属性在技术上可以通过两种方式之一进行设置。您可以使用属性语法来引用在资源中定义的样式,例如<按钮  Style="{StaticResource  myResourceKey}" .../>。或者您可以使用属性元素语法来定义内联样式,例如:

    <object>
       <object.Style>
          <Style .../>
        </object.Style>
    </object>

    属性用法更常见。内联定义但未在资源中定义的样式必须仅限于包含元素,并且不能轻易地重复使用,因为它没有资源键。通常,资源定义的样式更通用且更有用,并且更符合一般的Windows Presentation Foundation(WPF)编程模型原则,即将代码中的程序逻辑与标记中的设计分离。通常没有理由设置内联样式或模板,即使您只打算在该位置使用该样式或模板。 。可以采用样式或模板的元素也支持内容属性和内容模型如果您只使用通过样式或模板创建的任何逻辑树,那么使用直接标记中的等效子元素填充该内容属性会更容易。这将完全绕过样式和模板机制。样式和模板也可以使用返回对象的标记扩展启用的其他语法。具有可能方案的两个这样的扩展包括TemplateBindingBinding

    类型转换器和XAML

    本主题介绍了从字符串转换类型作为常规XAML语言功能的目的。在.NET Framework中,TypeConverter 类用作特定用途,作为托管自定义类的实现的一部分,该托管自定义类可用作XAML属性。用法中的属性值如果编写自定义类,并且希望类的实例可用作XAML可设置属性值,则可能需要将TypeConverterAttribute 应用于类,编写自定义类型转换器类或两者。

    类型转换概念

    XAML和字符串值

    在XAML文件中设置属性值时,该值的初始类型是纯文本中的字符串。甚至像这样的其他原语最初也是XAML处理器的文本字符串.XAML处理器需要两条信息才能处理属性值。第一条信息是的属性的值类型允许被设置。定义的属性值在XAML中处理的任何字符串最终都可以转换或解析为该类型的值。如果值是XAML解析器理解的基元(例如数值),则尝试直接转换字符串。如果该值是枚举,则该字符串用于检查与该枚举中的命名常量的名称匹配如果该值既不是解析器理解的原语也不是枚举,则所讨论的类型必须能够基于转换的字符串提供类型的实例或值。这是通过指示类型转换器类来完成的

    在XAML中使用现有类型转换行为

    根据您对底层XAML概念的熟悉程度,您可能已经在基本应用程序XAML中使用了类型转换行为而未实现它。例如,WPF定义了数百个类型值的属性。一个是描述二维坐标空间的坐标值,它实际上只是有两个重要的属性:XY.在XAML中指定一个点时,将其指定为在您提供的XY值之间带有分隔符(通常为逗号) )的字符串。例如:<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">。即使是这种简单类型的Point及其在XAML中的简单用法也涉及一种类型转换器。在这种情况下,这是类型转换器类PointConverter

    在类级别定义的的类型转换器简化了采用的所有属性的标记用法如果没有类型转换器,您需要为前面显示的相同示例提供以下更详细的标记

    <LinearGradientBrush>

       <LinearGradientBrush.StartPoint>

           <Point X="0" Y="0"/>

       </LinearGradientBrush.StartPoint>

       <LinearGradientBrush.EndPoint>

          <Point X="1" Y="1"/>

       </LinearGradientBrush.EndPoint>

    </LinearGradientBrush>

    是否使用类型转换字符串或更详细的等效语法通常是编码样式选择。您的XAML工具工作流程也可能会影响值的设置方式。一些XAML工具倾向于发出最详细的标记形式,因为它更容易往返于设计器视图或其自身的序列化机制。

    通常可以通过检查类(或属性)是否存在应用的TypeConverterAttribute来在WPF和.NET Framework类型上发现现有类型转换器。对于XAML目的以及可能的其他目的,此属性将为该类型的值命名该类,该类是支持类型转换器。

    键入转换器和标记扩展

    标记扩展和类型转换器根据XAML处理器行为及其应用的方案填充正交角色。尽管上下文可用于标记扩展使用,但标记扩展提供值的属性的类型转换行为通常不会在标记扩展实现中进行检查。换句话说,标记即使扩展报道查看一个字幕:字符串作为其ProvideValue输出,也不会调用该字符串上应用于特定属性或属性值类型的类型转换行为。通常,标记扩展的目的是处理字符串并返回一个没有涉及任何类型转换器的对象

    需要标记扩展而不是类型转换器的一种常见情况是引用已存在的对象。最好的情况是,无状态类型转换器只能生成一个新实例,这可能是不可取的。有关标记扩展的更多信息,请参阅Markup Extensions和WPF XAML

    本机类型转换器

    在XAML解析器的WPF和.NET Framework实现中,某些类型具有本机类型转换处理,但不是通常被认为是基元的类型。这种类型的一个例子是DateTime。其原因在于.NET Framework体系结构的工作原理:DateTime类型在mscorlib中定义,mscorlib是.NET中最基本的库。不允许将DateTime归因于来自引入依赖项的另一个程序集的属性(TypeConverterAttribute来自系统)因此不能支持通过归属的通常类型转换器发现机制。相反,XAML解析器具有需要此类本机处理的类型列表,并且处理这些类型与处理真实基元的方式类似。(在日期时间的情况下,这涉及对解析的调用。)

    实现类型转换器

    类型转换器

    在前面给出的示例中,提到了PointConverter类。对于XAML的.NET实现,用于XAML目的的所有类型转换器都是从基类的TypeConverter 派生的类。该类型转换器在它之前XAML存在的.NET框架的版本中存在类; 它对于XAML,TypeConverter的作用扩展为包括作为to-string和from-string转换的基类,这些转换允许解析字符串属性值,并可能将特定对象属性的运行时值处理回字符串以作为属性进行序列化

    类型转换器定义了四个与XAML处理目的的字符串转换相关的成员:

    其中,最重要的方法是ConvertFrom。此方法将输入字符串转换为所需的对象类型。严格地说,ConvertFrom方法可以实现将更广泛的类型转换为转换器的预期目标类型,从而达到使之能够达到XMAL功能之外的目的,例如支持运行时转换,但是对于XAML目的,它只是代码路径可以处理重要的字符串输入。

    下一个最重要的方法是ConvertTo。如果将应用程序转换为标记表示(例如,如果将其作为文件保存到XAML),则ConvertTo负责生成标记表示。在这种情况下,对于XAML重要的代码路径是你当传递destinationType字符串

    CanConvertToCanConvertFrom是服务查询类型转换器实现的功能时使用的支持方法。必须您实现这些方法以报道查看true转换器请立即获取iTunes的等效转换方法的特定于类型的情况。对于XAML目的,这通常表示字符串类型。

    XAML的文本信息和类型转换器

    每个TypeConverter实现都可以自己解释构成转换的有效字符串的内容,也可以使用或忽略作为参数传递的类型描述。关于培养和XAML类型转换有一个重要的考虑因素.XAML完全支持使用可本地化的字符串作为属性值。但是不支持将可本地化的字符串用作具有特定区域性要求的类型转换器输入,因为XAML属性值的类型转换器涉及使用en-USculture的必要的固定语言分析行为。限制的设计原因的更多信息,请参阅XAML语言规范([MS-XAML])。

    举一个作为文本信息可能成为问题的一个例子,一些文本使用逗号作为数字的小数点分隔符。这将与许多WPF XAML类型转换器具有的行为相冲突,即使用逗号作为分隔符(基于历史先例,例如常见的X,Y形式或逗号分隔列表)。即使在周围的XAML中传递文本(设置Language或字幕:,这种以使用方式为逗号十进制xml:langsl-SI字幕:的例子)也无法解决问题。

    实现ConvertFrom

    要实现XAML的TypeConverter,该转换器的ConvertFrom方法必须接受字符串作为value参数。如果字符串格式有效,并且可以通过TypeConverter实现进行转换,则返回的对象必须支持转换为属性所需的类型。否则,ConvertFrom实现必须返回null

    每个TypeConverter实现都可以自己解释构成转换的有效字符串的内容,也可以使用或忽略作为参数传递的类型描述或文化上下文。但是,WPF XAML处理可能不会在所有情况下将值传递给类型描述上下文,也可能不会传递基于文本的文本xml:lang

     注意

    不要使用大括号字符,特别是{,作为字符串格式的基本元素。这些字符保留为标记扩展序列的入口和出口。

    实现的ConvertTo

    的ConvertTo用于序列化支持。通过的ConvertTo为您的自定义类型及其类型转换器提供的序列化支持不是绝对必需的。但是,如果要实现控件,或者使用序列化作为类的功能或设计的一部分,则应实实现ConvertTo

    要实现XAML的TypeConverter,该转换器的ConvertTo方法必须接受作为value参数支持的类型(或值)的实例。当destinationType参数是String类型时,返回的对象必须能够转换为String。返回的字符串必须表示序列化值value。理想情况下,如果将该字符串传递给同一转换器的ConvertFrom实现,则您选择的序列化格式应该能够生成相同的值,而不会显着丢失信息。

    如果该值无法序列化,或者转换器不支持序列化,则的ConvertTo实现必须返回null,并且在这种情况下允许抛出异常。但是,如果您确实抛出异常,则应该报告无法将该转换用作CanConvertTo实现的一部分,以便支持首先使用CanConvertTo检查以避免异常的最佳做法。

    如果destinationType参数不是字符串类型,则可以选择自己的转换器处理。通常,您将恢复到基本实现处理,在最基本的的ConvertTo中会引发特定的异常。

    实现CanConvertTo

    CanConvertTo实现应返回truedestinationType类型的String,否则推迟到基本实现。

    实现CanConvertFrom

    CanConvertFrom实现应返回truesourceType类型的String,否则推迟到基本实现。

    应用TypeConverterAttribute

    为了将自定义类型转换器用作XAML处理器的自定义类的代理类型转换器,必须将.NET Framework属性TypeConverterAttribute应用于类定义。通过该属性指定的ConverterTypeName必须是自定义类型转换器的类型名称。应用此属性后,当XAML处理器处理属性类型使用您的自定义类类型的值时,它可以输入字符串并返回对象实例。

    您还可以基于每个属性提供类型转换器。不是将.NET Framework属性TypeConverterAttribute应用于类定义,而是将其应用于属性定义(主要定义,而不是其中的getset实现)。属性的类型必须与自定义类型转换器处理的类型匹配。应用此属性后,当XAML处理器处理该属性的值时,它可以处理输入字符串并返回对象实例。如果您选择使用微软.NET Framework中的属性类型或某其他无法控制类定义且无法在其中应用TypeConverterAttribute,则每个属性类型转换器技术特别有用

    WPF XAML扩展

      1.绑定标记扩展

    绑定表达式用法

    <object property="{Binding}" .../>  
    或  
    <object property="{Binding  bindProp1=value1[, bindPropN=valueN]*}" ...  
    />  
    或  
    <object property="{Binding path}" .../>  
    或 
    <object property="{Binding path[, bindPropN=valueN]*}" .../>

    语法注释

    在上面的实例中,[]*不是文字。它们是表示可以使用零个或多个bindProp =value的表示形式的一部分,在bindProp =value等式之间用分隔符“,”分开。可以使用Binding对象元素的属性来设置“可以使用绑定扩展设置的绑定属性”部分中列出的任何属性。但是,这并不是Binding的标记扩展使用,它只是设置CLR Binding类属性的属性的一般XAML处理。换句话说,<Binding bindProp1 ="value1 "[ bindPropN ="valueN"]*/>Binding对象元素用法的属性的等效语法,而不是Binding表达式用法。要了解Binding的特定属性的XAML属性用法,请参阅相关属性的“XAML属性用法”部分。在.NET Framework类库中Binding

    XAML值

      
    bindProp1, bindPropN要设置的BindingBindingBase属性的名称。并非所有Binding属性都可以使用Binding扩展名设置,并且某些属性Binding只能通过使用其他嵌套标记扩展名在表达式中设置。请参见“可以使用绑定扩展设置的绑定属性”部分。
    value1, valueN要将属性设置为的值。属性值的处理最终特定于所设置的特定Binding属性的类型和逻辑。
    path设置隐式Binding.Path属性的路径字符串。另请参见PropertyPath XAML语法

     

    不标准用法{Binding}

    {Binding}在上个例子所示的使用创建一个使用默认值对象的Binding,它令Binding.Path的初始值为null。这在许多场景中仍然有用,因为创建的Binding可能依赖于关键数据绑定属性,例如在运行时数据上下文中设置的Binding.PathBinding.Source。有关数据上下文概念的更多信息,请参阅Data Binding

    隐含路径

    Path=不需要出现在表达式的地方,该Binding标记扩展使用Binding.Path作为一个概念上“默认属性”。如果指定Binding具有一个隐式路径的表达式,则隐式路径必须出现在表达式的首部,在其他bindPropvalue等式之前,其中Binding属性由名称指定。例如:{Binding PathString},这里PathString是一个字符串,其被转换为由标记扩展使用创建的Binding中Binding.Path的值。例如,您可以在逗号分隔符后面附加其他命名属性的隐式路径。 {Binding LastName, Mode=TwoWay}

    可以使用绑定扩展设置的绑定属性

    本主题中显示的语法使用通用bindProp = value近似值,因为可以通过标记扩展/表达式语法设置BindingBaseBinding许多读/写属性Binding。它们可以按任何顺序设置,但隐式Binding.Path除外。(您可以选择显示指定Path=,在这种情况下,可以按任何顺序设置)。基本上,您可以使用以逗号分隔的bindPropvalue对在下面的列表中设置零个或多个属性。

    其中一些属性值需要不支持XAML中的文本语法的本机类型转换的对象类型,因此需要标记扩展才能设置为属性值。有关详细信息,请查看.NET Framework类库中的XAML属性用法部分以获取每个属性; 您使用XAML属性语法有或没有进一步的标记扩展使用的字符串是基本一样的,你在一个指定的值Binding表达式,与您不要将围绕每个引号异常bindPropvalueBinding表达。

    以下是无法使用标记扩展/ 表达式形式设置的Binding属性。 Binding{Binding}

       类型标记扩展

    • x:Type 命名为类型提供  类型。对象此工具最常用于样式和模板有关详细信息,请参阅  X:类型标记扩展

    • x:Static 。产生静态值值来自值类型代码实体,它们不是目标属性值的类型,但可以计算为该类型有关详细信息,请参阅  X:静态标记扩展

      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />  
      <!--在此用法中,x:Static首先计算语句SystemColors.ControlBrushKey然后返回一个字符串。然后将该字符串用作DynamicResourced的参数-->

       

    • x:Null 指定  null 为属性的值,可以用于属性或属性元素值有关详细信息,请参见  .X:空标记扩展

    • x:Array 如果故意不使用WPF基本元素和控件模型提供的集合支持,则支持在XAML语法中创建通用数组有关详细信息,请参见  .X:阵列标记扩展

    • WPF特定的标记扩展

      WPF编程中使用的最常见的标记扩展是那些支持资源引用(StaticResource 和  DynamicResource)以及支持数据绑定(Binding)的扩展。

    • StaticResource 通过替换已定义资源的值来为属性提供值。   StaticResource 在XAML加载时最终生成,并且不能够在运行时访问该对象。有关详细信息,请参阅  的静态资源的的标记扩展

    • DynamicResource 为属性提供一个运行时引用的资源值。每次访问此类资源时,动态资源引用都会强制执行新查找,并且在运行时可以访问对象图。为了获得此访问权限,  DynamicResource 概念由WPF属性系统中的依赖项属性和计算表达式支持。因此,您只能  DynamicResource 用于依赖项属性目标。有关详细信息,请参阅  DynamicResource标记扩展

    • Binding 使用在运行时父应用于对象的数据上下文为属性提供数据绑定值此标记扩展相对复杂,因为它。请|立即的的的iTunes中的电子杂志用于指定数据绑定。的实质内联语法有关详细信息,请参阅  绑定标记扩展

    • RelativeSource 提供可以在运行时对象树中导航几种可能关系的绑定的源信息。这为在多用途模板中创建的绑定提供了专门的源代码,或者在不完全了解周围对象树的情况下在代码中被创建。有关详细信息,请参阅  RelativeSource MarkupExtension

    • TemplateBinding 使控件模板能够使用来自将使用模板的类的对象模型定义属性的模板化属性的值。换句话说,模板定义中的属性可以访问仅在应用模板后才存在的上下文。有关详细信息,请参阅  TemplateBinding标记扩展。有关实际使用的更多信息  TemplateBinding,请参阅  使用CONTROLTEMPLATES示例进行样式设置

    • ColorConvertedBitmap 支持相对先进的成像方案。有关详细信息,请参阅  ColorConvertedBitmap标记扩展

    • ComponentResourceKey 并且  ThemeDictionary 支持资源查找的各个方面,特别是对于使用自定义控件打包的资源和主题。有关更多信息,请参阅  ComponentResourceKey标记扩展,  ThemeDictionary标记扩展或  控制创作概述

    更多相关内容
  • XAML 格式化程序 XAML 文件乱七八糟? 你不会再看到这个了! XAML 格式化程序——一键式,干净利落! 克隆和启动 这是一个 Visual Studio 扩展性。 在开始之前,您应该下载: 运行 Visual Studio 后,请按照下列...
  • 用于 C/C++ 的 XAML 跨平台框架的实现。 这个项目还没有完成,还需要做很多工作。 欢迎问题和拉取请求! 目标 XamlCpp 的目标是轻松快速地编写跨平台和跨语言* GUI 应用程序。 它使用 XAML 的方言来描述 UI,但...
  • 使用 Microsoft.UI.Xaml (WinUI) 库:该应用程序包含最新的 WinUI NuGet 包,并展示如何使用控件,如 NavigationView、SwipeControl 等。 基本布局:此示例将显示您的应用程序的所有可能的布局选项,并允许您与...
  • XAML工具包中的材料设计 适用于Windows桌面的全面且易于使用的Material Design主题和控件库。 概括 所有主要WPF Framework控件的材料设计样式 支持该主题的其他控件,包括“多功能按钮”,“卡片”,“对话框”,...
  • WinUI 2可以在任何Windows 10 UWP XAML应用中使用,也可以在Windows 10中使用的Xamarin.Forms应用中使用。 WinUI 3是WinUI框架的下一个版本,将于2021年发布。它极大地将WinUI扩展为完整的UX框架,使WinUI可用于...
  • 将3D Studio模型文件(.3ds)转换为XAML资源以在WPF 3D客厅场景中使用的教程
  • 主要介绍了在WPF中动态加载XAML中的控件,实例分析了WPF中针对XAML中控件的动态调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 图片转xaml

    2019-02-07 19:11:06
    提取图片的路径(支持png较好),生成wpf使用的path路径,分辨率最大支持到原图的分辨率。
  • XamlX 通用的可插入XAML编译器,没有运行时相关性。 Avalonia项目当前正在将其用作XAML引擎。 编译器不以任何方式,形状或形式与XamlLanguageTypeMappings ,并且可以通过配置XamlLanguageTypeMappings来满足您...
  • 将矢量图转xmal,SVG 图片转换为适合 WPF 使用的 XAML 代码
  • Avalonia是一个基于XAML的跨平台UI框架,提供了灵活的样式系统,并支持各种操作系统,例如通过.NET Framework和.NET Core的Windows,通过XorgLinux,macOS。 Avalonia已准备好进行通用桌面应用程序开发。 但是,...
  • 使用C#和XAML构建移动,桌面和WebAssembly应用。 今天。 什么是Uno平台Uno平台(发音为“ Oono”或“ Ouno”)是一个通用Windows平台桥,它允许基于UWP的鳕鱼使用C#和XAML来构建移动,桌面和WebAssembly应用程序。...
  • HTML与XAML转换源码

    2018-11-28 11:19:32
    HTML与XAML转换源码,里面涉及到多种转换,HTML to XAML, HTML to RTF, RTF to HTML
  • Uno平台的XAML控件库端口 该存储库是库的端口,该在Windows,iOS,Android和WebAssembly上上运行。 您可以在地址上签出画廊的WASM目标。 XAML控件库 以交互格式显示所有XAML控件。 该应用程序是的交互式伴侣,并...
  • #Xaml的动画管理器# 动画管理器旨在以非常非常简单的方式对xaml控件进行动画处理。 这些动画在Windows 8和Windows Phone 8上的工作方式相同。 为Xaml控件设置动画时,有很多痛点。 如果这不容易,就不会完成 它...
  • Svg2Xaml.zip

    2021-08-16 09:15:07
    一个能够将SVG文件转换为XAML格式以便WPF程序显示的控制台程序。命令使用格式为:Svg2XamlDemo.exe c:\data\input.svg,则会生成对应的XAML文件 c:\data\input.xaml
  • 为什么使用XamlCSS for XAML? 简洁 使用(s)css样式可以更简洁地声明您的样式。 XamlCSS甚至支持SCSS功能的子集,例如, 和 。 这使您可以使声明更加简洁。 自由组合样式 除了香草Xaml样式外,css还允许您自由组合...
  • using XAML. Whether you’re coming from Windows Presentation Foundation (WPF) or C#, or you’re just going deeper with Xamarin, this guide covers the most oft-used topics and techniques for Xamarin....
  • 自己用WPF的XAML语言写的一个类似于苹果手机上的滑动按钮的开关,可以直接使用,程序比较简单易懂,没有任何生涩的引用,涉及WPF的资源定义,控件布局,模板自定义,事件触发,动画实现等基本知识,只是新手学习如何...
  • XAML tutorial

    2018-08-03 22:27:09
    Welcome to the XAML tutorial for beginners. This tutorial puts greater emphasis on real- time implementation of the concept rather than discussing just the theory part. The primary objective of this ...
  • Adobe XD插件可将资产导出到Xamarin.Forms XAML样式和资源。 演示版 选择Plugins -> Xamarin.Forms Exporter 预览将打开,显示XAML资源。 您可以从预览中选择并复制一些资源,或者继续并单击“ Copy以将所有资源...
  • 适用于通用应用程序的XAML仪表控件,Windows 8.1(台式机/ Windows Phone),WPF,Silverlight
  • 通过使用 Visual Studio、其他一些 XAML 设计器或手动创建 XAML 文件,您可以创建复杂的 GUI 界面,您可以使用 PowerShell 调用和处理这些界面。 该 zip 文件还包含一个示例文件,用于展示如何使用它。 用法: # ...
  • 白色ComboBox背景.xaml

    2020-06-18 10:06:20
    WPF 中ComboxBox的白色背景。领导强迫症,找半天才看到哪里修改
  • XAML行为 XAML行为是一种易于使用的方法,可以用最少的代码向Windows UWP应用程序添加常见和可重用的交互性。 它适用于本机和托管应用程序。 XAML行为的使用受MIT许可证的约束 建置状态 平台 地位 管理 本国的 入门...
  • XAML转HTML.zip

    2020-10-07 12:28:01
    xaml转换成html/xaml转换成html/xaml转换成html/xaml转换成html/xaml转换成html/xaml转换成html
  • MainWindow.xaml.cs

    2020-05-04 10:57:21
    编写一个WPF应用程序,利用数据并行计算两个矩阵(M×N和N×P)的乘积,得到一个M×P的矩阵。 (1)在代码中用多任务通过调用某方法实现矩阵并行运算,在调用的参数中分别传递M、N、P的大小。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,519
精华内容 31,007
关键字:

xaml

友情链接: REG.rar