![](/img/trans.png)
[英]How to make a grid in a DataTemplate for a ItemTemplate auto-size to ListBox width?
[英]Grid row auto-size relative sizing issue
嘗試這個:
<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.