דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. window template WPF

window template WPF

מתוזמן נעוץ נעול הועבר ארכיון code613m
25 פוסטים 3 כותבים 1.1k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #8

    אני חושב שאפשר לעשות מחלקה כזו:

    Public Class windowFace
        Inherits UserControl
        Protected Overrides Sub OnInitialized(e As System.EventArgs)
            MyBase.OnInitialized(e)
            InitializeComponent()
        End Sub
    
        Private _mainGrid As Grid
        Public Property mainGrid() As Grid
            Get
                Return _mainGrid
            End Get
            Set(value As Grid)
                _mainGrid = value
                grid1.Children.Add(_mainGrid)
                Grid.SetRow(_mainGrid, 1)
            End Set
        End Property
    
        Dim grid1 As System.Windows.Controls.Grid = New System.Windows.Controls.Grid()
        Private Sub InitializeComponent()
          
            Dim rowDefinition2 As System.Windows.Controls.RowDefinition = New System.Windows.Controls.RowDefinition()
            Dim rowDefinition3 As System.Windows.Controls.RowDefinition = New System.Windows.Controls.RowDefinition()
            Dim rowDefinition4 As System.Windows.Controls.RowDefinition = New System.Windows.Controls.RowDefinition()
            Dim label5 As System.Windows.Controls.Label = New System.Windows.Controls.Label()
            Dim label6 As System.Windows.Controls.Label = New System.Windows.Controls.Label()
         
            Me.BeginInit()
            Me.FlowDirection = System.Windows.FlowDirection.RightToLeft
            grid1.BeginInit()
            rowDefinition2.BeginInit()
            rowDefinition2.Height = New System.Windows.GridLength(50.0R, System.Windows.GridUnitType.Pixel)
            rowDefinition2.EndInit()
            rowDefinition3.BeginInit()
            rowDefinition3.Height = New System.Windows.GridLength(1.0R, System.Windows.GridUnitType.Star)
            rowDefinition3.EndInit()
            rowDefinition4.BeginInit()
            rowDefinition4.Height = New System.Windows.GridLength(50.0R, System.Windows.GridUnitType.Pixel)
            rowDefinition4.EndInit()
            grid1.RowDefinitions.Add(rowDefinition2)
            grid1.RowDefinitions.Add(rowDefinition3)
            grid1.RowDefinitions.Add(rowDefinition4)
            label5.BeginInit()
            label5.Name = "Label1"
            label5.Content = "כותרת עליונה"
            label5.HorizontalAlignment = System.Windows.HorizontalAlignment.Center
            label5.VerticalAlignment = System.Windows.VerticalAlignment.Center
            label5.EndInit()
            label6.BeginInit()
            label6.Name = "Label2"
            label6.Content = "כותרת תחתונה"
            label6.HorizontalAlignment = System.Windows.HorizontalAlignment.Center
            label6.VerticalAlignment = System.Windows.VerticalAlignment.Center
            System.Windows.Controls.Grid.SetRow(label6, 2)
            label6.EndInit()
            grid1.Children.Add(label5)
            grid1.Children.Add(label6)
            grid1.EndInit()
            Me.Content = grid1
            Me.EndInit()
        End Sub
    End Class
    

    ותשתמש בזה כפקד בכל חלון כך:

    <Window x:Class="Window3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window3" Height="300" Width="300" 
            xmlns:my="clr-namespace:WindowTemplet">
        <Grid>
            <my:windowFace HorizontalAlignment="Stretch" 
                           x:Name="WindowFace1" VerticalAlignment="Stretch" >
                <my:windowFace.mainGrid>
                    <Grid >
                        <Button Margin="38,40,55,38" Name="Button">Button</Button>
                    </Grid>
                </my:windowFace.mainGrid>
            </my:windowFace>
        </Grid>
    </Window>
    

    בתוך ה mainGrid אתה יכול לשים כל מה שצריך להיות בחלון הזה.

    פורסם במקור בפורום CODE613 ב18/03/2014 15:07 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • ש מנותק
      ש מנותק
      שמואל
      כתב ב נערך לאחרונה על ידי
      #9

      בקיצור אתה אומר לכתוב קוד לא בXAML
      בלית ברירה אולי זה הפיתרון
      פשוט קשה לי האמין שאין לזה דרך בxaml

      פורסם במקור בפורום CODE613 ב18/03/2014 15:14 (+02:00)

      תגובה 1 תגובה אחרונה
      0
      • ש מנותק
        ש מנותק
        שמואל
        כתב ב נערך לאחרונה על ידי
        #10

        ושאלה נוספת,
        נגיד שאתה רוצה שהעיצוב ישמר לאורך כל החלונות באפליקציה
        אבל אתה רוצה לשנות את הכיתוב (למשל חלון אחד הכותרת תהיה 'הכנסות' ובחלון שני 'הוצאות' וכו' וכו')

        פורסם במקור בפורום CODE613 ב18/03/2014 15:24 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #11

          אני לא יודע באמת למה במן ריצה זה לא עובד ככה, בכל אופן אם מפרשים לסטייל KEY ונותנים לו התייחסות של סטטיק ריסורס בכל חלון (במאפיין סטייל) אז זה עובד.
          שמואל, אם אתה רוצה לשנות בכל חלון את הפקדים שבכותרת עליונה ותחתונה, אז למה טמפלט? תעתיק ותדביק מפעם אחת ממנה אתה מרוצה.
          אם אתה רוצה שרק הטקסט וכדו' ישתנה אז תוכל לעשות בטמפלט בינדינג לאלמנטים אחרים של החלון כמו לטייטל ועוד.

          פורסם במקור בפורום CODE613 ב18/03/2014 15:41 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          1
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #12

            @שמואל

            בקיצור אתה אומר לכתוב קוד לא בXAML
            בלית ברירה אולי זה הפיתרון
            פשוט קשה לי האמין שאין לזה דרך בxaml

            אפשר גם אם XAML בצורה הבאה:

            מוסיפים לפרוייקט פקד חדש, זה ה XAML שלו:

            <UserControl x:Class="UserControl2"
                         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.RowDefinitions>
                        <RowDefinition Height="50"/>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="50"/>
                    </Grid.RowDefinitions>
                    <Border>
                        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" >כותרת עליונה</TextBlock>
                    </Border>
                    <Grid Grid.Row="1" Name="Grid1">
            
                    </Grid>
                    <Border Grid.Row="2" >
                        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" >כותרת תחתונה</TextBlock>
                    </Border>
                </Grid>
            </UserControl>
            

            וזה הקוד:

            Public Class UserControl1
                Inherits UserControl
            
                Dim UC As New UserControl2
                Public Sub New()
                    Me.Content = UC
                End Sub
            
                Private _mainGrid As Grid
                Public Property mainGrid() As Grid
                    Get
                        Return _mainGrid
                    End Get
                    Set(value As Grid)
                        _mainGrid = value
                        UC.Grid1.Children.Add(_mainGrid)
                        Grid.SetRow(_mainGrid, 1)
                    End Set
                End Property
            
            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="350"
                    Width="525" xmlns:my="clr-namespace:test">
                <my:UserControl1 x:Name="UserControl11" >
                    <my:UserControl1.mainGrid>
                        <Grid Name="Grid">
                            <Button Margin="39,40,61,51" Name="Button">לחצן</Button>
                        </Grid>
                    </my:UserControl1.mainGrid>
                </my:UserControl1>
            </Window>
            

            כמו מקודם בתוך ה mainGrid אתה יוכל להכניס מה שתרצה.
            [שימו לב! יש פה טריק שבעזרתו אפשר לעשות UserControl עם XAML וגם להכניס לתוכו פקדים עם שמות - בעיה שהועלת כאן בפורום בעבר וגם בכמה מקומות ברשת ולא נמצא לה פתרון.]

            פורסם במקור בפורום CODE613 ב18/03/2014 19:00 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #13

              אוי רחמים אפשר לדעת מה לא טוב בטמפלט שהלכת כה רחוק?
              ותאמין לי שהלכת רחוק.

              פורסם במקור בפורום CODE613 ב18/03/2014 19:57 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              0
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #14

                זה מה שעשיתי עם הטמפלט:

                <Window x:Class="Window1"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    Title="Window1" Height="300" Width="300" Style="{StaticResource WindowTemplate}">
                    <Grid>
                       
                    </Grid>
                </Window>
                

                והתוצאה בזמן ריצה ... חלון שחור !

                פורסם במקור בפורום CODE613 ב18/03/2014 20:04 (+02:00)

                תגובה 1 תגובה אחרונה
                0
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #15

                  @רחמים

                  והתוצאה בזמן ריצה ... חלון שחור !

                  יאהווו!! ולכן עבדת כ"כ קשה! אז קבל שתי אפשרויות: או קבע צבע רקע לאלמנט הראשי בטמפלט (בורדר או גריד), או אפשרות מרתקת יותר קבע את שני הערכים האלו: WindowStyle="None" AllowsTransparency="True" בסטייל או בחלון.

                  פורסם במקור בפורום CODE613 ב18/03/2014 20:24 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #16

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

                    פורסם במקור בפורום CODE613 ב18/03/2014 21:22 (+02:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • dovidD מחובר
                      dovidD מחובר
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי
                      #17

                      @רחמים

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

                      ייתכן.
                      אבל שים לב שבשביל זה לא צריך UserControl שמכיל את תוכן החלון, די בUserControl שנמצא בראש החלון.
                      בכל מקרה, לעולם לא צריך שילוב של שתי UserControls.

                      פורסם במקור בפורום CODE613 ב18/03/2014 22:14 (+02:00)

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      0
                      • רחמיםר מנותק
                        רחמיםר מנותק
                        רחמים מורחק
                        כתב ב נערך לאחרונה על ידי
                        #18

                        אלו לא באמת 2 UserControl אלא רק 1 רק בהצהרה הם שניים כדי שאחד יכיל את הXAML והשני את הקוד וכך יהיה אפשר מצד אחד לעצב את ה UserControl ב XAML ומצד שני להוסיף פקדים לתוך ה UserControl ולתת להם שם בלא לקבל שגיאה.

                        פורסם במקור בפורום CODE613 ב18/03/2014 22:27 (+02:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • ש מנותק
                          ש מנותק
                          שמואל
                          כתב ב נערך לאחרונה על ידי
                          #19

                          @דוד ל.ט.

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

                          תכל'ס אצלי עובד רק בזמן עיצוב ולא בזמן ריצה

                          @דוד ל.ט.

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

                          בלית ברירה אעשה כך אבל זה לא הדרך למסמכי xaml ארוכים ומייגעים
                          תאר לך גם 10 חלונות ויותר וכל שינוי תרוץ לעדכן בכולם

                          פורסם במקור בפורום CODE613 ב18/03/2014 23:06 (+02:00)

                          תגובה 1 תגובה אחרונה
                          0
                          • dovidD מחובר
                            dovidD מחובר
                            dovid ניהול
                            כתב ב נערך לאחרונה על ידי
                            #20

                            @שמואל

                            @דוד ל.ט.
                            אני לא יודע באמת למה במן ריצה זה לא עובד ככה, בכל אופן אם מפרשים לסטייל KEY ונותנים לו התייחסות של סטטיק ריסורס בכל חלון (במאפיין סטייל) אז זה עובד.

                            תכל'ס אצלי עובד רק בזמן עיצוב ולא בזמן ריצה

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

                            @שמואל

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

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

                            בלית ברירה אעשה כך אבל זה לא הדרך למסמכי xaml ארוכים ומייגעים
                            תאר לך גם 10 חלונות ויותר וכל שינוי תרוץ לעדכן בכולם

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

                            פורסם במקור בפורום CODE613 ב19/03/2014 11:10 (+02:00)

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            0
                            • ש מנותק
                              ש מנותק
                              שמואל
                              כתב ב נערך לאחרונה על ידי
                              #21

                              WpfApplication6.rarמצורף קוד בסיסי מישהוא יכול לתת את הדעת למה זה לא עובד לי?
                              תודה רבה

                              פורסם במקור בפורום CODE613 ב19/03/2014 11:44 (+02:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • רחמיםר מנותק
                                רחמיםר מנותק
                                רחמים מורחק
                                כתב ב נערך לאחרונה על ידי
                                #22

                                תחליף את השורה הזאת

                                Template="{Binding Mode=OneWay, Source={StaticResource myWindowStyle}}"
                                

                                בזאת:

                                Style="{StaticResource myWindowStyle}"
                                

                                פורסם במקור בפורום CODE613 ב19/03/2014 11:53 (+02:00)

                                תגובה 1 תגובה אחרונה
                                2
                                • ש מנותק
                                  ש מנותק
                                  שמואל
                                  כתב ב נערך לאחרונה על ידי
                                  #23

                                  קודם כל זה חידוש גדול בשבילי

                                  <AdornerDecorator Grid.Row="1">
                                                                      <ContentPresenter/>
                                   </AdornerDecorator>
                                  

                                  דבר שני
                                  @דוד ל.ט.

                                  @רחמים

                                  והתוצאה בזמן ריצה ... חלון שחור !

                                  יאהווו!! ולכן עבדת כ"כ קשה! אז קבל שתי אפשרויות: או קבע צבע רקע לאלמנט הראשי בטמפלט (בורדר או גריד), או אפשרות מרתקת יותר קבע את שני הערכים האלו: WindowStyle="None" AllowsTransparency="True" בסטייל או בחלון.

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

                                  פורסם במקור בפורום CODE613 ב19/03/2014 13:01 (+02:00)

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מחובר
                                    dovidD מחובר
                                    dovid ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #24

                                    לא הבנת כנראה לא כוונתי, התכוונתי לשנות את הטמפלט שהעליתי.
                                    הנה ככה למשל:

                                    <Style x:Key="WinStyle" TargetType="{x:Type Window}">
                                        <Setter Property="Template">
                                            <Setter.Value>
                                                <ControlTemplate TargetType="{x:Type Window}">
                                                    <Grid Background="White">
                                                        <Grid.RowDefinitions>
                                                            <RowDefinition Height="50"/>
                                                            <RowDefinition Height="*"/>
                                                            <RowDefinition Height="50"/>
                                                        </Grid.RowDefinitions>
                                                        <Border  >
                                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{TemplateBinding Title}" />
                                                        </Border>
                                                        <AdornerDecorator Grid.Row="1">
                                                            <ContentPresenter/>
                                                        </AdornerDecorator>
                                                        <Border Grid.Row="2" >
                                                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" >כותרת תחתונה</TextBlock>
                                                        </Border>
                                                    </Grid>
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </Style>
                                    

                                    אגב הAdornerDecorator אני גם לא כ"כ מכיר, אני סה"כ העתקתי מהטמפלט שהVS יוצר.

                                    פורסם במקור בפורום CODE613 ב19/03/2014 13:32 (+02:00)

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    1
                                    • ש מנותק
                                      ש מנותק
                                      שמואל
                                      כתב ב נערך לאחרונה על ידי
                                      #25

                                      תודה רבה

                                      פורסם במקור בפורום CODE613 ב19/03/2014 14:01 (+02:00)

                                      תגובה 1 תגובה אחרונה
                                      0

                                      • 1
                                      • 2
                                      בא תתחבר לדף היומי!
                                      • התחברות

                                      • אין לך חשבון עדיין? הרשמה

                                      • התחברו או הירשמו כדי לחפש.
                                      • פוסט ראשון
                                        פוסט אחרון
                                      0
                                      • דף הבית
                                      • קטגוריות
                                      • פוסטים אחרונים
                                      • משתמשים
                                      • חיפוש
                                      • חוקי הפורום