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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. כיצד להגדיר GridColumns (עמודות) ו-GridRows (שורות) בקלות ב-wpf בהשראת Avalonia

כיצד להגדיר GridColumns (עמודות) ו-GridRows (שורות) בקלות ב-wpf בהשראת Avalonia

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 339 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP
    pcinfogmachP
    pcinfogmach
    כתב ב נערך לאחרונה על ידי pcinfogmach
    #1

    תמיד תופס הרבה מקום וזמן להגדיר שורות ועמודות בתוך פקד Grid ב-wpf
    ראיתי מה הם עשו ב-Avalonia ותפסתי רעיון לעשות לעצמי Class שיעשה אותו הדבר.

    ברגיל צריך לעשות כך:

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
    <\Grid>
    

    עם ה-class שיצרתי אפשר לעשות כך:

     <Grid local:GridSetup.Columns="Auto,*,2*" local:GridSetup.Rows="Auto,*,Auto">
    

    מצו"ב סקיצה אשמח לקבל משוב

    namespace RegexInWord.UI.Wpf
    {
        using System;
        using System.Windows.Controls;
        using System.Windows;
        public class GridSetup
        {
            private static GridLengthConverter _gridLengthConverter = new GridLengthConverter();
    
            public static readonly DependencyProperty ColumnsProperty =
               DependencyProperty.RegisterAttached(
                   "Columns",
                   typeof(string),
                   typeof(GridSetup),
                   new PropertyMetadata(null, OnColumnsChanged));
    
            public static void SetColumns(DependencyObject element, string value) =>
                element.SetValue(ColumnsProperty, value);
    
            public static string GetColumns(DependencyObject element) =>
                (string)element.GetValue(ColumnsProperty);
    
            private static void OnColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (d is Grid grid && e.NewValue is string definition)
                {
                    grid.ColumnDefinitions.Clear();
                    foreach (var item in definition.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        grid.ColumnDefinitions.Add(new ColumnDefinition { Width = ParseGridLength(item.Trim()) });
                    }
                }
            }
    
            public static readonly DependencyProperty RowsProperty =
                DependencyProperty.RegisterAttached(
                    "Rows",
                    typeof(string),
                    typeof(GridSetup),
                    new PropertyMetadata(null, OnRowsChanged));
    
            public static void SetRows(DependencyObject element, string value) =>
                element.SetValue(RowsProperty, value);
    
            public static string GetRows(DependencyObject element) =>
                (string)element.GetValue(RowsProperty);
    
            private static void OnRowsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                if (d is Grid grid && e.NewValue is string definition)
                {
                    grid.RowDefinitions.Clear();
                    foreach (var item in definition.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        grid.RowDefinitions.Add(new RowDefinition { Height = ParseGridLength(item.Trim()) });
                    }
                }
            }
    
            private static GridLength ParseGridLength(string value)
            {
                return (GridLength)_gridLengthConverter.ConvertFromString(value);
            }
        }
    }
    

    גמ"ח מידע מחשבים ואופיס

    קומפיונטק תגובה 1 תגובה אחרונה
    1
    • pcinfogmachP pcinfogmach

      תמיד תופס הרבה מקום וזמן להגדיר שורות ועמודות בתוך פקד Grid ב-wpf
      ראיתי מה הם עשו ב-Avalonia ותפסתי רעיון לעשות לעצמי Class שיעשה אותו הדבר.

      ברגיל צריך לעשות כך:

      <Grid>
          <Grid.ColumnDefinitions>
              <ColumnDefinition Width="Auto"/>
              <ColumnDefinition Width="*"/>
              <ColumnDefinition Width="2*"/>
          </Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
              <RowDefinition Height="Auto"/>
              <RowDefinition Height="*"/>
              <RowDefinition Height="Auto"/>
          </Grid.RowDefinitions>
      <\Grid>
      

      עם ה-class שיצרתי אפשר לעשות כך:

       <Grid local:GridSetup.Columns="Auto,*,2*" local:GridSetup.Rows="Auto,*,Auto">
      

      מצו"ב סקיצה אשמח לקבל משוב

      namespace RegexInWord.UI.Wpf
      {
          using System;
          using System.Windows.Controls;
          using System.Windows;
          public class GridSetup
          {
              private static GridLengthConverter _gridLengthConverter = new GridLengthConverter();
      
              public static readonly DependencyProperty ColumnsProperty =
                 DependencyProperty.RegisterAttached(
                     "Columns",
                     typeof(string),
                     typeof(GridSetup),
                     new PropertyMetadata(null, OnColumnsChanged));
      
              public static void SetColumns(DependencyObject element, string value) =>
                  element.SetValue(ColumnsProperty, value);
      
              public static string GetColumns(DependencyObject element) =>
                  (string)element.GetValue(ColumnsProperty);
      
              private static void OnColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
              {
                  if (d is Grid grid && e.NewValue is string definition)
                  {
                      grid.ColumnDefinitions.Clear();
                      foreach (var item in definition.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                      {
                          grid.ColumnDefinitions.Add(new ColumnDefinition { Width = ParseGridLength(item.Trim()) });
                      }
                  }
              }
      
              public static readonly DependencyProperty RowsProperty =
                  DependencyProperty.RegisterAttached(
                      "Rows",
                      typeof(string),
                      typeof(GridSetup),
                      new PropertyMetadata(null, OnRowsChanged));
      
              public static void SetRows(DependencyObject element, string value) =>
                  element.SetValue(RowsProperty, value);
      
              public static string GetRows(DependencyObject element) =>
                  (string)element.GetValue(RowsProperty);
      
              private static void OnRowsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
              {
                  if (d is Grid grid && e.NewValue is string definition)
                  {
                      grid.RowDefinitions.Clear();
                      foreach (var item in definition.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                      {
                          grid.RowDefinitions.Add(new RowDefinition { Height = ParseGridLength(item.Trim()) });
                      }
                  }
              }
      
              private static GridLength ParseGridLength(string value)
              {
                  return (GridLength)_gridLengthConverter.ConvertFromString(value);
              }
          }
      }
      
      קומפיונטק
      קומפיונטק
      קומפיונט
      כתב ב נערך לאחרונה על ידי קומפיונט
      #2

      אתה יכול להשתמש עם GridLengthConverter

      private static GridLengthConverter _gridLengthConverter = new GridLengthConverter();
      
      private static GridLength ParseGridLength(string value)
      {
          return _gridLengthConverter.ConvertFromString(value);
      }
      

      עוד משהו, מקובל להפריד עם עם רווח ולא רק פסיק.

      ואגב אני חושב שזה הגיע מ - WinUI עוד לפני Avalonia

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

      שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

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

      בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

      הרשמה התחברות
      תגובה
      • תגובה כנושא
      התחברו כדי לפרסם תגובה
      • מהישן לחדש
      • מהחדש לישן
      • הכי הרבה הצבעות


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

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

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