سؤال

أواجه بعض المشاكل في تشغيل هذا في تطبيق WPF الذي أعمل عليه.في الأساس، ما أبحث عنه هو شيء مثل جزء المهام في MMC:

  • يحتوي التطبيق على ثلاثة أعمدة في الجزء الرئيسي من الشاشة.أحتاج إلى عمود على الجانب الأيمن يمكن تغيير حجمه.أفترض أن هذا يعني استخدام شبكة مع GridSplitter ولكن أي شيء يعمل سيفي بالغرض.
  • أريد أن أكون قادرًا على حفظ عرض العمود الأيمن عند إغلاق التطبيق وتحميله عند فتح التطبيق ولكن يجب أن يكون هذا الحجم الأولي:يجب أن يكون المستخدم قادرًا على تغيير حجمه.
  • عندما أقوم بتغيير حجم النافذة، أريد أن يظل العمودان الأيمن والأيسر بنفس الحجم وأن يتم تغيير حجم العمود الأوسط مع عرض النافذة.
  • يجب أن يكون للأعمدة الموجودة على الجانب الأيسر والأيمن الحد الأدنى للعرض.عندما أقوم بتغيير حجم العمود الأيمن، أريد أن يصبح العمود الأوسط أصغر حجمًا وليس العمود الأيسر.
  • أريد أيضًا أن أكون قادرًا على تبديل رؤية العمود الأيمن باستخدام زر تبديل خارج العمود وعندما يعود إلى الرؤية أريد أن يكون بنفس العرض الذي كان عليه من قبل.

أحاول أن أفعل أكبر قدر ممكن في XAML ومع الربط.

وهل يمكنني أن أضعها فوق الكريمة والآيس كريم ورقائق الشوكولاتة من فضلك؟:-)

هل كانت مفيدة؟

المحلول

عندما قرأت متطلباتك، بدلاً من التفكير في أ Grid, ، أفكر في أ DockPanel.

<DockPanel>
    <Grid Name="right"
        DockPanel.Dock="Right" MinWidth="100" />
    <Grid Name="Left"
        DockPanel.Dock="Left" MinWidth="100" />
    <Grid Name="middle" />
</DockPanel>

إذا قمت بإجراء وسيلة لتغيير الحجم right, ، ثم middle سوف تتغير كما right يتم تغيير حجمها.إذا قمت بتغيير حجم النافذة، فقط middle سوف يتغير.تخزين وإعداد Width ل right الأمر متروك لك، ولكن لا ينبغي أن يكون صعبا.

أما بالنسبة للسماح للمستخدم بتغيير الحجم right, ، سيكون الأمر أكثر تعقيدًا بعض الشيء، لكنني وجدت هذا المقال من المفترض أن يساعد. هذه المقالة الأخرى قد يساعد أكثر.

من أجل الرؤية right, ، يمكنك ضبطه Visibility ل Collapsed لإخفائه واستعادته عن طريق ضبطه على Visible.

ملحوظة:لا يجب أن تكون الألواح بالداخل Grids، ولكنك سوف ترغب في استخدام نوع من Panel لكل.كل ما لديك داخل الحالي الخاص بك Grid يجب أن تعمل الأعمدة بشكل جيد.

نصائح أخرى

لقد استخدمت شبكة مع GridSplitters لأن هذا جعل من السهل تغيير حجم العمود الأوسط مع الحفاظ على عرض العمودين الأيمن والأيسر.

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MainWindow"
    Title="Main Window"
    Width="640" Height="480">

    <Grid>
        <Grid.ColumnDefinitions>
            <!-- Left column -->
                <ColumnDefinition Width="200" MinWidth="100"/>
                <!-- Left GridSplitter column -->
                <ColumnDefinition Width="5"/>
                <!-- Center column. A width of * means the column will fill
                     any remaining space. -->
                <ColumnDefinition Width="*"/>
                <!-- Right GridSplitter column -->
                <ColumnDefinition x:Name="RightSplitterColumn" Width="5"/>
                <!-- Right column -->
                <ColumnDefinition x:Name="RightColumn" Width="200"
                                  MinWidth="100"/>
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
                <GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" />
                <Button x:Name="ToggleButton" Grid.Column="2"
                        Content="Toggle Right Column" Width="150" Height="25"
                        Click="ToggleButton_Click" />
    </Grid>
</Window>

كود خلف

عند إخفاء العمود الأيمن، قمت فقط بتعيين عرض العمود على 0 نظرًا لأن أعمدة الشبكة لا تحتوي على خاصية الرؤية.

public partial class MainWindow : Window
{
    private double rightColumnWidth;
    private double rightColumnMinWidth;
    private bool rightColumnHidden;

    public MainWindow()
    {
        this.InitializeComponent();
    }

    private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
        if (rightColumnHidden)
        {
            // Restore the widths.
            RightColumn.MinWidth = rightColumnMinWidth;
            RightColumn.Width = new GridLength(rightColumnWidth);
            RightSplitterColumn.Width = new GridLength(5);
        }
        else
        {
            // Remember the user-set widths for the columns.
            rightColumnWidth = RightColumn.Width.Value;
            rightColumnMinWidth = RightColumn.MinWidth;

            // Remember to set the minimum width to 0 before changing the actual
            // width.
            RightColumn.MinWidth = 0;
            RightColumn.Width = new GridLength(0);
            RightSplitterColumn.Width = new GridLength(0);
        }

        rightColumnHidden = !rightColumnHidden;
    }
}

أما بالنسبة لحفظ واستعادة عرض الأعمدة عند بدء التشغيل، فسأقوم فقط بتخزين متغيرات العرض في ملف إعدادات ثم تطبيقها عند إعادة فتح التطبيق الخاص بك.

قم بتعيين عرض تعريف العمود على تلقائي ووضع عنصر تحكم داخل هذا العمود ومنح نجمة للأعمدة الأخرى.عندما تريد إخفاء العمود الذي يحتوي على المحتوى، قم بتعيين عنصر التحكم. الرؤية = مطوي وبما أن عرض العمود هو تلقائي، فلن ترى هذا العمود وستأخذ الأعمدة المتبقية المساحة.

وبعد 3 سنوات، يمكنك العثور على نهج آخر في CodeProject.

http://www.codeproject.com/Articles/437237/WPF-Grid-Column-and-Row-Hiding

يقوم بإضافة خاصية "مرئي" إلى تعريفات الأعمدة المخصصة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top