خاصیت Content :
هر کنترل محتوا، دارای خاصتی به نام Content می باشد. این خاصیت در برگیرنده عناصری خواهد بود که به عنوان محتوای کنترل مورد نظر شناخته می شوند.
به طور کلی خاصیت Content در کنترل های محتوا، می تواند شامل دو دسته کلی زیر از عناصر WPF باشد:
الف) دسته اول عناصری هستند که از کلاس UIElement ، ارث بری نمی کنند. در این موارد، متد ToString() فراخوانی شده تا متن آن عنصر را به عنوان محتوای عنصر مورد نظر قرار دهد.
ب) دسته دم عناصری که از کلاس UIElement ارث بریم می کنند. این عناصر در واقع تمامی عناصر و.یژوال در WPF را شامل می شوند. کمپایلر از متد OnRender این عناصر استفاده می کند تا قابل نمایش در کنترل محتوا با شند.
برای درک بهتر این موضوع به دو قطعه کد زیر دقت کنید :
<Button HorizontalAlignment="Center" VerticalAlignment="Center">this a simple text Content</Button>
کد فوق تنها یک رشته متنی را به عنوان محتوای عنصر Button در نظر گرفته است. این نوع از محتوا، از نوع دسته (الف) می باشد.
نتیجه اجرای این کد شبیه به شکل زیر خواهد بود:
در واقع می توان در این حالت، خاصیت Content را به خاصیت Text عناصر در دات نت فریم ورک 2.0 تشبیه کرد. البته دقت داشته باشید که این مورد صرفا یک تشبیه می باشد.
حال به کد زیر دقت کنید :
<Button>
<Image Source="./Images/WPF.jpg"></Image>
</Button>
کد فوق یک عکس را به عنوان محتوای Button معرفی می کند. این نمونه از محتوا، ار نوع دسته (ب) می باشد که با فراخوانی متد OnRender، عکس مورد نظر قابل نمایش در کنترل Button به عنوان محتوا گردیده است.
نتیجه حاصل از اجرای کد فوق به صورت زیر می باشد:
دو قطعه کد فوق از ساده ترین، حالت های خاصیت Content بودند. درواقع قدرت این خاصیت بسیار فراتر از قرار گیری یک عکس و یا یک رشته متنی درون آن می باشد. با استفاده از کنترل های کانتینر می توانید کنترل های بسیاری را در یک Button و یا هر کنترل محتوای دیگر قرار دهید.
به قطعه کد زیر دفت کنید :
<Window x:Class="ContentControlsInWPF.TextAndImageContent"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TextAndImageContent" Height="300" Width="300">
<Grid>
<Button VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel>
<Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill" Source="./Images/WPF.jpg"></Image>
<TextBlock TextAlignment="Center" >Fill Boxes And then Click Ok</TextBlock>
<StackPanel Orientation="Horizontal">
<Label MinWidth="50">name</Label>
<TextBox MinWidth="120"></TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label MinWidth="50">Family</Label>
<TextBox MinWidth="120"></TextBox>
</StackPanel>
<Button>Ok</Button>
<Image VerticalAlignment="Top" MaxHeight="75" MaxWidth="75" Stretch="Fill" Source="./Images/WPF.jpg"></Image>
</StackPanel>
</Button>
</Grid>
</Window>
در قطعه کد فوق، یک Button در کنترل کانتینر اصلی فرم یعنی گرید قرار گرفته است. در خاصیت Content کنترل Button یک کنترل StackPanel قرار گرفته ایت که خود شامل پنج کنترل فرزند به شزح زیر می باشد:
ابتدا یک عنصر Image ، در بالاترین قسمت کنترل StackPanel قرار گرفته است. سپس یک کنترل TextBlock با متن Fill Boxes And then Click Ok قرار گرفته است. پس از آن دو کنترل StackPanel داخلی به مجموعه کنترل های فرزند اضافه شده اند.
هر یک از این دو کنترل StackPanel داخلی خود شامل دو کنترل فرزند می باشند، که به صورت افقی در کنترل کانتینر خود قرار گرفته اند.
پس از دو کنترل StackPanel داخلی، یک کنترل Button و در نهایت یک عنصر Image دیگر قرار داده شده است.
نتیجه حاصل از اجرای کد فوق را در شکل زیر مشاهده می کنید:
همانطور که در شکل فوق نیز مشاهده می کنید، به راحتی می توان با بهره گیری از کنترل های کانتینر، به تعداد دلخواهی از کنترل های WPF را در یک کنترل محتوا قرار داد. از این خاصیت می توان در ساخت کنترل های سفارشی و کنترل های کاربری بهره بسیاری برد.