the_king
مدیرکل انجمن
نه. نمیگه میشناسه، میگه رفتار پردازشگر در این شرایط مثل رفتار با یک مشخصه الحاقی است، یعنی در چنین حالتی پردازشگر انتظار داره که با یک مشخصه الحاقی طرف باشه، گزینه دیگری نمونده.سلامی مجدد
خیلی ممنون استاد.
استاد ، طبق لینک زیر (بخش آخرش) :
XAML Syntax In Detail - WPF
اگه توی کلاسی ، از پروپرتیِ یک کلاسِ دیگه استفاده کنیم ، پردازنده ی xaml در wpf ، اون پروپرتی را به عنوان attached property میشناسه . درسته؟
پردازشگر نه در کلاس خود Button همچین مشخصه Label.Background ای رو دیده و نه در سلسله وراثت Button، پس تنها گزینه ای که برای پردازش باقی مونده مشخصه الحاقی است که اگر Label.Background مشخصه الحاقی هم نباشه (که نیست) گزینه دیگری برای پردازشگر نمونده و متن ئه قابل پردازش نیست.
Attached Property کد نویسی متفاوتی داره و مشخصه عادی نمیتونه بصورت مشخصه الحاقی عمل کنه. مشخصه الحاقی صریحا در کد کلاس به عنوان مشخصه الحاقی ثبت میشه، مشخصه معمولی اینطوری ثبت نشده.
در مشخصه عادی یک فیلد DependencyProperty ئه static رو در یک مشخصه public که در کلاس اش تعریف شده بکار می برند، مثلا BackgroundProperty رو در مشخصه Background بکار می برند.
اما در مشخصه الحاقی یک فیلد DependencyProperty ئه static رو با DependencyProperty.RegisterAttached ثبت می کنند، مثلا ColumnProperty رو ثبت می کنند. دیگه مشخصه ای مثل Column در Grid تعریف نشده که از ColumnProperty استفاده کنه.
بله. البته پردازشگر بر اساس بود و نبود اون کد RegisterAttached با اسمی مثل "Background" برای نوع typeof(Label) میتونه بفهمه که مشخصه الحاقی با این نام هست یا نه. کد کلاس ای مثل Grid رو ببینید.مثلا در تگ Button ای ، به عنوان attributes اش ، از Label.Background استفاده کنیم ، در این صورت ، پردازنده ی xaml در wpf ، این روپرتی را سعی میکنه به عنوان attached property پردازش کنه اما چون این پروپرتیِ Label.Background در راهنمای سایت اش (و کلا) به عنوان attached property مشخص نشد ، پس ارور میده . درسته؟
کد:
[CommonDependencyProperty]
public static readonly DependencyProperty ColumnProperty = DependencyProperty.RegisterAttached("Column", typeof(int), typeof(Grid), new FrameworkPropertyMetadata(0, new PropertyChangedCallback(Grid.OnCellAttachedPropertyChanged)), new ValidateValueCallback(Grid.IsIntValueNotNegative));
نظری ندارم.بعد اینکه استاد ، به نظرتون چطوره هر بخش را که تمام میکنم ، آموزش همون قسمت را هم بدم؟
چون wpf ، اگه بخوایم به ریزترین جزئیاتش بپردازم ، اولا که خیلی طول میکشه و دوما که چون پروسه ی آموزش طول میکشه ، اگه این جزئیات را الان بخونم و بعد بخوام آموزشش را درست کنم ، حداقل ۴ ماه طول میکشه و توی این ۴ ماه ، دوباره این جزئیات را فراموش میکنم و مجبورم دوباره بخونم و همچنین اینکه هیچ آموزش wpf را ندیدم که به جزئیاتِ چندانی بپردازه (البته منظورم این نیست که من نپردازم یا حتما بپردازم) ، به نظرتون چطوره هر موقع که مقاله و مبحثی را میخونم ، همون موقع آموزشش را هم بدم؟