WPF פקדים מותאמים אישית עם XAML
-
עשיתי פקד כזה:
<TabControl x:Class="myTab" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> </Grid> </TabControl>
הקוד שלו נראה בדיוק כך:
Public Class myTab Inherits TabControl End Class
הוספתי אותו לחלון:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="242" Width="401" xmlns:my="clr-namespace:WpfApplication1"> <Grid> <my:myTab Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" x:Name="MyTab1" VerticalAlignment="Top" Width="200"> <TabItem Header="TabItem1" Name="TabItem1"> <Grid /> </TabItem> </my:myTab> </Grid> </Window>
אבל כאשר באתי להריץ קיבלתי הודעה כזו:
Error 1 Cannot set Name attribute value 'TabItem1' on element 'TabItem'. 'TabItem' is under the scope of element 'myTab', which already had a name registered when it was defined in another scope. Line 7 Position 40.
איפה הטעות?
פורסם במקור בפורום CODE613 ב05/01/2014 14:28 (+02:00)
-
לא יודע מה השגיאה שהוא נותן, אבל זה לא אמור לעבוד ככה...
מנין לך כל המעניין הזה? x:Class לא יכול להיות מיושם על שום דבר חוץ מWindow וכדומה (כל דבר שלא מתארח).
בדרך כלל ובדרך הטבע אין לך סיבה להצטרך למחלקה עם XAML.
אם אתה רוצה טאב קונטרול עם פונקציונליות אחרת ברמה הלוגית (לא בתצוגה, וגם לא באירועים חוזרים על עצמם וכיוצא),
אתה עושה מחלקה (ללא XAML!) כמו שהראית בפוסט שמכילה את ההצהרה על הירושה מהפקד שאותו אתה רוצה להמשיך (לפקד חדש לגמרי עליך לירש מUIElement).
בXAML אתה פשוט מתייחס למחלקה החדשה במקום לפקד קיים. זהו.פורסם במקור בפורום CODE613 ב05/01/2014 15:38 (+02:00)
-
דיברנו בפורום לאחרונה על טאב-קונטרול מעוצב, גם לעצב את הטאב-אייטמס וגם שהטאב-אייטמס לא יגלשו לשתי שורות ויהיה סגירה לכל טאב וגם תמונה וכל זה דורש גם קוד וגם XAML אז רציתי להכניס הכל לתוך שני קבצים מחוברים כלומר אחד XAML שיכיל את כל הסטולים והטפלטים והשני שיכיל את כל הקוד וכך אוכל לקחת את זה לכל תוכנית ולהשתמש כפקד.
מה הדרך הנכונה?פורסם במקור בפורום CODE613 ב05/01/2014 15:46 (+02:00)
-
אני לא נכנס לכל הדגומאות של הטאב קונטרול שאתה מפתח.
זה לוקח הרבה זמן ללמוד כל דבר, וזה לא נוגע בד"כ לשאלות.
כך שאני לא יודע לייעץ לך ברגע אחד מה לעשות
אבל כללו של דבר: ב99% מהמקרים אין שום שינוי שמצדיק ירושה. מספיק להצמיד סטיילים ואירועי קוד לסטייל.
אם זה לא מספיק, אז יורשים, ובנוסף לכך מצרפים סטייל למחלקה החדשה.פורסם במקור בפורום CODE613 ב05/01/2014 16:25 (+02:00)
-
מה חשוב לי זה איך לעשות את זה נח להעברה מתוכנה לתוכנה, ולכן אני מחפש איך לעשות שכל הקוד וכל ה XAML השייך לטאב-קונטרול יישב בקובץ אחד או שניים בפני עצמם, ולא אצטרך לעשות העתק הדבק לקוד ו/או ל XAML לכל חלון שיש לי בו את הטאב קונטרול.
דבר נוסף בטאב-קונטרול שדיברנו באשכולות סמוכים הוספתי תמונה ולזה חייבים ירושה שהרי אני יוצר בשביל זה 'מאפיין תלות' חדש ומאפיין זה מופיע גם בסטולים שב XAML.פורסם במקור בפורום CODE613 ב05/01/2014 18:21 (+02:00)
-
אבל חיפשתי קצת ברשת וראיתי שזה ממש באג ב WPF, שאי אפשר ליצור usercontrol ולשים בתוכו פקדים עם שם עיין כאן.
ממש אכזבה, שדווקא WPF שכל כולה מיועדת לעיצוב פקדים ובנושא זה עצמו יש כזה באג בולט :!:מה עושים ?
פורסם במקור בפורום CODE613 ב06/01/2014 14:33 (+02:00)