كيفية جعل العناصر في dockpanel توسيع لتناسب جميع المساحة المتاحة في WPF؟

StackOverflow https://stackoverflow.com/questions/983732

  •  13-09-2019
  •  | 
  •  

سؤال

انا املك StackPanel تحتوي على أ StackPanel وبعض العناصر الأخرى. الأول StackPanel لديه اتجاه عمودي، فإن المرء الداخلي لديه اتجاه أفقي. الداخلية واحدة لديها TreeView و ListView, ، أود منهم توسيع وتناسب عرض النافذة، والتي قمت بتعيينها بواسطة النافذة والسماح للمستخدم بالتغيير. أود أيضا أن يكون الخارجي StackPanel لتناسب ارتفاع النافذة. كيف أقوم بهذا العمل؟

تعديل:لقد تحولت إلى استخدام DockPanel, ، وأنا وضعت DockPanel.Dock خصائص بشكل صحيح في كل عنصر من العناصر، وقد تعطيل LastChildFill في كل من dockpanels، لا يزال التصميم لا يمتد.

الرمز:

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
    <DockPanel Name="wrapperDockPanel" LastChildFill="False">
        <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" />
        <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False">
            <TreeView Name="categoryTreeView" />
            <ListView Name="clipListView" />
        </DockPanel>
        <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" />
    </DockPanel>
</Window>
هل كانت مفيدة؟

المحلول

هذا يجب أن يفعل ذلك - قمت بإعداده حتى يشارك TreeView و List ListView العرض الرئيسي 50/50؛ إذا كنت لا تريد ذلك، ضعها على "تلقائي" و "*" أو شيء من هذا. استخدم "Lastchildfill" لصالحك!

<Window x:Class="Clippy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">

    <DockPanel LastChildFill="True">
        <Menu Width="Auto" DockPanel.Dock="Top" />
        <ToolBar Width="Auto" DockPanel.Dock="Top" />
        <StatusBar DockPanel.Dock="Bottom" />

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="0.5*" />
                <RowDefinition Height="0.5*" />
            </Grid.RowDefinitions>

            <TreeView Name="categoryTreeView" Grid.Row="0" />
            <ListView Name="clipListView" Grid.Row="1" />
        </Grid>
    </DockPanel>

</Window>

نصائح أخرى

استخدام dockpanel بدلا من ذلك. لا يهتم StackPanel صراحة بالمساحة المرئية، بينما يقوم DockPanel بحساب حجمها على أساس المساحة المتوفرة.

تحديث:

بالإضافة إلى ذلك، في تجربتي، وضع جسم النافذة في طريقة عرض، وعرض العرض فقط في النافذة يجعل تجربة أفضل للحجم التلقائي.

لسبب ما يضع جميع الأطفال مباشرة في النافذة لا يبدو أن حجم السيارات جيدا.

تحديث 2:

وأود أن أزل سمة dockpanel.dock صريحة من العنصر الذي تريد تمديده (املأ) المساحة غير المستخدمة.

تعيين خصائص العرض والارتفاع إلى "السيارات"

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