簡體   English   中英

網格行自動調整大小的相對大小問題

[英]Grid row auto-size relative sizing issue

我是WPF的相對新手,但仍在努力了解其基本知識。 我剛剛遇到了一個網格大小調整問題,這讓我感到很困惑(而且似乎不僅限於網格)。

問題是,如果我在另一個網格的行/列中有一個具有相對大的行/列的網格,並且該行/列的尺寸設置為自動,則子網格的相對大小似乎無效。

在此處輸入圖片說明

我對這個xaml的期望是,即使內部網格列位於父網格的自動調整大小的列內,它們的大小仍相對較大(其中一個是另一個寬度的3倍)。 這是預期的行為嗎,是錯誤還是我缺少基本的東西?

謝謝!!

嘗試這個:

   <Grid Background="DarkBlue">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Label BorderBrush="White"
               BorderThickness="1"
               Content="Cell 1"
               Foreground="White" />
        <Grid Grid.Column="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10*" />
                <ColumnDefinition Width="3*" />
            </Grid.ColumnDefinitions>
            <Label BorderBrush="White"
                   BorderThickness="1"
                   Content="Cell 2"
                   Foreground="White" />

            <Label Grid.Column="1"
                   BorderBrush="White"
                   BorderThickness="1"
                   Content="Cell 3"
                   Foreground="White" />
        </Grid>
    </Grid>

第二個網格表現異常的原因是,第一個網格的列設置為“自動”。 由於它是自動的,因此它試圖將其中的所有內容壓縮得盡可能小-如果沒有標簽,則第二個網格的每一列的寬度均為0。 再加上標簽的寬度使它們大致相等。

我相信這與WPF在自動列/行中計算寬度的順序有關。

它要做的第一件事是注意第二個網格的自動值為0。然后,在此之后,它將向此計算值中添加內容的任何寬度-由於兩個標簽的大小大致相同,因此結果為2類似的列。

我的解決方案刪除了​​auto值,而是說第一個網格的第一列“總寬度為2 / 3rds,另一列為1 / 3rd”-它不是auto,所以第二列不會以任何方式被壓扁。

似乎外部Grid列指示內部Grid應該具有的寬度。 嘗試通過將列寬綁定到內部網格寬度來反轉測量順序: <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>

<Grid Background="DarkBlue">
    <Grid.Resources>
        <Style TargetType="Label">
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="BorderBrush" Value="White"/>
            <Setter Property="BorderThickness" Value="1"/>
        </Style>
    </Grid.Resources>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=InnerGrid}"/>            
    </Grid.ColumnDefinitions>

    <Label Content="Cell 1" />

    <Grid Grid.Column="1" Name="InnerGrid" Background="DarkRed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Label Content="Cell 2.1" />
        <Label Grid.Column="1" Content="Cell 2.2" />
    </Grid>
</Grid>

調整大小后,僅第一列會增加(請參見屏幕截圖)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM