>

söndag 10 oktober 2010

Vad är skillnaden mellan x:Name och Name?

Namnge dina element gör du genom att använda x:Name men oftast kan du även använda Name. Frågan många nya XAML kodare ställer sig är "Vad är skillnaden på x:Name och Name?". Det enkla svaret är att de samma sak. Men vet du vad som egentligen ligger bakom?
<Button x:Name="okButton"/>
<Button Name="okButton"/>
 
I WPF finns attributet RuntimeNamePropertyAttribute som används för att flagga vilken Property som skall länkas ihop med x:Name. Detta attribut appliceras på klassen enligt följande:
[RuntimeNamePropertyAttribute("Name")]
public class MyXamlElement 
{
  public string Name { get; set; }
  public string Id { get; set; }
}
x:Name kan alltså också länkas till ett annan property, tex Id i exemplet ovan: 
[RuntimeNamePropertyAttribute("Id")]
 
Klassen FrameworkElement har detta attribute deklarerat på just Name. Då de flesta av dina grafiska element ärver från denna klass kommer de också  att ha en Name property som är länkad med x:Name.
I Silverlight räcker det att propertyn heter Name för att den skall länkas ihop med x:Name. Du kan då inte välja en annan property för att länkas med x:Name.
Om propertyn Name eller som i WPF fallet - RuntimeNamePropertyAttribut, saknas går det fortfarande att använda x:Name för att namnge dina element.
I samband med att du sätter x:Name skapas en variabel för elementet med namnet som anges i x:Name. Denna  variabel kommer dock att få accessnivå internal/Friend, om du vill ändra på detta lägger du även till x:FieldModifier på elementet:
<Button x:Name="okButton" x:FieldModifier="private"/>

Inga kommentarer:

Skicka en kommentar