خیلی ممنون استاد .
ما object element داریم که به المنت ها و تگ هایی میگن که از نوع آبجکت (معمولا از نوع کنترل ها) هستند و property element داریم که به تگ ها و المنت هایی که میخوان پروپرتی ای از یه آبجکت یا یک کنترل را مثل کد زیر مقداردهی کنن ، میگن :
کد:
<ComboBox Margin="10,47,0,0">
<ComboBox.Items>
<System:Int32>10</System:Int32>
<System:Int32>20</System:Int32>
<System:String>سلام</System:String>
</ComboBox.Items>
</ComboBox>
در کد بالا ، به تگ اول (ComboBox) ، میگن object element و به تگ دوم (ComboBox.Items) که یه پروپرتی از یه کنترل و آبجکت هست را property element میگن .
درسته؟
بعد اینکه در wpf ، یه کلاس کنترل داریم که خودش از FrameworkElement ارث بری میکنه .
خیلی از کنترل هایی مثل Page و Panel و اینها ، فرزند کلاس Control نیستند و فرزند FrameworkElement هستند . اصلا با این اوضاعی که کلاس هایی مثل همین Page و Panel ، وقتی فرزند Control نیستند ، به اینها دیگه کنترل نمیگن . درسته دیگه؟ بهشون FrameworkElement میگن؟
میخواستم دقیق تر فرق این کلاس FrameworkElement و کلاس Control در wpf را بدونم . چرا مثل windows form ، همه ی اینها فرزند Control نشدند؟
--------------------------------------------------------
استاد ، من بخش Markup extensions اش گیر کردم .
الان در کد زیر :
کد:
<Page.Resources>
<SolidColorBrush x:Key="MyBrush" Color="Gold"/>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="Background" Value="Blue"/>
</Style>
</Page.Resources>
را من میخوام بصورت کامل ترین شکل ممکن بنویسم :
1) اولا پروپرتیِ FrameworkElement.Resources ، شی ای از کلاس کالکشن دیکشنری ResourceDictionary را برمیگردونه که یک hash table میتونه باشه (کلا یه کالکشن) .
این کلاس ResourceDictionary هم برای اضافه کردن اعضا (مثل hash table) ، مقدار Key و Value را در سی شارپ میخواد . بنابراین باید همین مقادیر ، برای پروپرتی های Key و Value را در xml هم بهشون بدیم .
و همچنین از اونجا که در همون لینک گفته بود که فقط اعضای کالکشن ها و آرایه ها را باید به عنوان یه عضوی که آرایه یا کالکشن لازم داره ، باید به اون عضو بدیم :
XAML overview - WPF
پس کد بالا در سی شارپ را اگه بخوایم بنویسیم ، چجوری باید بنویسیم؟
آیا مثلا SolidColorBrush ای که در کد بالا نوشت ، برابر با این هست که مثلا یه شی به عضو کلاس ResourceDictionary اضافه کرده باشیم که مقدار key اش رشته ی MyBrush هست و مقدار value اش شی ای از SolidColorBrush هست که مقدار پروپرتی Color از این شی ، Gold هست؟
یعنی آیا این جوری هست؟ :
کد:
this.btnTest1.Resources = new ResourceDictionary();
SolidColorBrush solidColorBrush = new SolidColorBrush((System.Windows.Media.Color)System.Windows.Media.ColorConverter.ConvertFromString("Gold"));
this.btnTest1.Resources.Add("MyBrush", solidColorBrush);
در خط بعدی (در کد اول) که Style هست هم به همین صورت هست؟ یعنی Style را به عنوان عضو دوم از کالکشن ResourceDictionary در بالا میشه حساب کرد؟
اگه این طور نیست و کد سی شارپ ای که دادم ، برابر با کد xml ای که دادم نیست ، پس بی زحمت ، معادل کدِ سی شارپِ اون کدِ xml ای که دادم را مینویسین؟
2) درباره ی همین پروپرتی FrameworkElement.Resources ، زیاد نمیدونم . آیا فقط کاربردش برای نوشتن style هاست؟ یا کاربرد دیگه ای هم داره؟
خیلی ممنون استاد .