PDA

View Full Version : سوال: تفاوت x:Name و Name



iradata
پنج شنبه 20 بهمن 1390, 06:10 صبح
سلام

می خواستم بدونم که چه تفاوتی بین x:Name و Name وجود داره ؟

در ضمن من در WPF تازه وارد هستم .

با تشکر

gsearch
دوشنبه 24 بهمن 1390, 18:50 عصر
با سلام،
تالار wpf چندان بازارش گرم نیست و مشتری نداره واسه همینه که هر یکی دو ماه یکبار شاید یکی پیدا بشه و جواب بده!

خوب بریم سر سوال شما:
احتمالاً همانطور که می دونی پیشوند x نشان دهنده فضای نام xaml هست که بصورت پیش فرض در تعریف Window مشخص شده.
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
در واقع در xaml فقط x:Name وجود داره.
وقتی از x:Name استفاده می کنی به پارسر xaml می گی که یک فیلد در code behind ایجاد کنه و اون رو مقداردهی کنه.
بصورت دقیق تر xaml بر اساس RuntimeNamePropertyAttribute می یاد مقدار x:Name رو به فیلد متناظرش در کلاس مپ می کنه.
مثال msdn:
[RuntimeNameProperty("BookID")]
public class Book
{
public Book()
{
}

public string BookID
{
get { return _bookID; }
set { _bookID = value; }
}

private string _bookID = string.Empty;
}
حالا همانطور که می بینی نیازی نیست که کلاس مربوطه شامل فیلد Name باشه و یا فیلد Name اون، مپ بشه.
(و حتی نیاز نیست که حتماًَ این مپ انجام بشه، یعنی x:Name فقط برای پارسر xaml معنی خواهد داشت!)

در FrameworkElement ( و تمام عناصری که از اون ارث می برن) فیلد Name وجود داره و به x:Name مپ می شه.
یعنی وقتی از مشتقات FrameworkElement استفاده می کنی، در حالت عادی فرقی بین Name و x:Name نیست.
البته یه تفاوتهایی دارن وقتی شما با ارجاع دادن به عناصر و استفاده از کنترلهای شخصی سروکار دارین.
مثلاً وقتی شما یک user control رو در همون اسمبلی که فایل xaml وجود داره استفاده می کنی، نمی تونید از Name استفاده کنی!؟ و باید از x:Name استفاده کنی.

امیدوارم جواب سوالتو گرفته باشی.

user6627
چهارشنبه 26 بهمن 1390, 16:19 عصر
زمانیکه بخواهیم در محیط xaml از اشیایی از نوع xml استفاده کنیم برای نام گذاری و استفاده از اشیای xml بایستی حتماً از یک :x استفاده نمود.
مثلا وقتی بخواهیم از یک xmlDataProvider در محیط xaml استفاده کنیم برای نام گذاری و استفاده از اینگونه اشیا باید از :x استفاده کرد.