מדריך WPF

מדריך WPF – פקדים מסוג ContentControl

‏ • Sela

בפרקים דומים במדריך כבר ראינו שלהרבה פקדים יש תכונה בשם Content. בתכונה זו לרוב שמנו ערך טקסטואלי, אבל הזכרתי כבר את העובדה שניתן לשים ערכים הרבה יותר מורכבים. בפרק זה נלמד מה בדיוק ניתן לשים בתכונה Content.

הפקדים Button, CheckBox, ListBoxItem ועוד הרבה מאוד פקדים נוספים יורשים מהמחלקה ContentControl. התכונה החשובה ביותר הנורשת ממחלקה זו היא אותה תכונת Content. תכונה זו

מייצגת את התוכן של אותו הפקד.

בתכונה Content ניתן לשים כל תוכן שנרצה. אם נשים טקסט פשוט, אזי הפקד שלנו יציג את הטקסט, כפי שראינו בדוגמאות עד כה. לעומת זאת אם נשים בתוך התכונה Content פקדים אחרים, אזי התוכן שלנו יהיה אותם פקדים. באופן זה ניתן ליצור אפליקציות מאוד מורכבות.

דוגמא שימושית מאוד שנוכל למצוא לכך היא שימוש בContent בשביל ליצור כפתור שיש בו גם טקסט וגם תמונה. בשביל לעשות זאת אנחנו נגדיר כפתור שהתוכן שלו אינו מחרוזת אלא פקד StackPanel. הסיבה שנרצה פקד StackPanel היא כדי להכניס מספר פקדים נוספים בתוכו. בתוך הפקד StackPanel (שבתוך הכפתור) אנו נכניס פקד TextBlock בשביל להציג טקסט ופקד Image בשביל להציג תמונה (ילמד בהרחבה בהמשך).

להלן דוגמת קוד שעושה זאת:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <StackPanel>
    <Button>
      <Button.Content>
        <StackPanel Orientation="Horizontal">
          <Image Source="/ControlsDemo;component/Koala.jpg"
                Width="100" />
          <TextBlock Text="this is my button text"
                    VerticalAlignment="Center"
                    Margin="10" />
        </StackPanel>
      </Button.Content>
    </Button>
  </StackPanel
>
</
Window
>

והתוצאה

מדריך WPF – פקדים מסוג ContentControl

 

נעיר כי יכולנו לכתוב את הקוד בצורה קצת קצרה יותר, באופן הבא:

<Window x:Class="ControlsDemo.MainWindow"
       >="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       >:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Height="350"
       Width="525">
  <StackPanel>
    <Button>
      <StackPanel Orientation="Horizontal">
        <Image Source="/ControlsDemo;component/Koala.jpg"
              Width="100" />
        <TextBlock Text="this is my button text"
                  VerticalAlignment="Center"
                  Margin="10" />
      </StackPanel>
    </Button>
  </StackPanel
>
</
Window
>

 

השוני הוא שבדוגמא זו לא ציינו לאיזה תכונה הStackPanel יכנס. הסיבה שזה עובד היא שלכל אלמנט יש תכונת ברירת מחדל שאליה ערכים נכנסים במידה ולא צוינה התכונה באופן מפורש. תכונת ברירת מחדל של כפתור (ושל הרבה פקדים נוספים שיורשים מ ContentControl) היא התכונה Content.

נעיר כי אם שמים בתכונה Content איזשהו ערך שהוא אינו פקד הניתן לתצוגה אזי תקרא פונקציית ToString שלו והערך החוזר יוצג כטקסט.

מלבד התכונה Content שיודעת להכיל ביטויים מורכבים ולא רק טקסט, יש תכונה נוספת שנפוצה אף היא בפקדים שנקראת Header. השתמשנו בה בפקדים MenuItem, TabControl ו Expander. בכל המקומות הללו ניתן לשים פקדים מורכבים בתור ערך לתכונה.

תגיות: , , , ,

arikp

אריק פוזננסקי הוא יועץ בכיר ומרצה בסלע. הוא השלים שני תארי B.Sc. במתמטיקה ומדעי המחשב בהצטיינות יתרה בטכניון. לאריק ידע נרחב בטכנולוגיות מיקרוסופט, כולל .NET עם C#, WPF, Silverlight, WinForms, Interop, COM/ATL, C++ Win32 ו reverse engineering.

תגובות בפייסבוק