x:Name与Name区别

x:Name与Name有两个不一样点:spa

一、x:Name是Xaml的标记特性,任何在Xaml中定义的元素,均可以使用x:Name来为元素指定名称。code

Name是FrameworkElement定义的依赖项属性(String类型),只有FrameworkElement的派生类才能够使用Name。xml

例如,Ellipse的Fill属性的类型是Brush,Brush不是FrameworkElement的子类,它没有Name属性。ip

所以,在Xaml中,为Brush指定名称时,只能使用x:Name标记特性:get

  1. <!--Xaml code-->  
  2.   
  3. <Ellipse>  
  4.    <Ellipse.Fill>  
  5.        <SolidColorBrush x:Name="aliceBlue" Color="AliceBlue"/>  
  6.        <!--注销上面一行的代码,使用下面一行的代码没法经过编译-->  
  7.        <!--<SolidColorBrush Name="aliceBlue" Color="AliceBlue"/>-->  
  8.    </Ellipse.Fill>  
  9. </Ellipse>  

二、在FrameworkElement的定义中,添加了System.Windows.Markup.RuntimeNamePropertyAttribute特性:string

该特性的做用是,当在Xaml中,使用x:Name后,该值将被自动赋给FrameworkElement的Name属性。编译

 

能够使用RuntimeNamePropertyAttribut,为本身定义的类添加名称特性:class

[RuntimeNamePropertyAttribute("N1")] im

[RuntimeNamePropertyAttribute("N2")] 
public class Person : UIElement 

    public String N1 { get; set; } 
    public String N2 { get; set; } 
}
di

  1.     <StackPanel>  
  2.         <wp:Person x:Name="WebAttack"/>  
  3.         <TextBlock>Name:</TextBlock>  
  4.         <TextBlock Text="{Binding ElementName=WebAttack, Path=N1}"/>  
  5.         <TextBlock>Nickname:</TextBlock>  
  6.         <TextBlock Text="{Binding ElementName=WebAttack, Path=N2}"/>  
  7.     </StackPanel>  
相关文章
相关标签/搜索