首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

WPF Grid 動態佈局:不指定寬度也能按比例分配的技巧

     編輯:程式設計疑難解答

問題現場


<Grid>  <!-- 未指定 Width -->
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock>123456789</TextBlock>  <!-- 默認在第 0 列 -->
</Grid>

結果:第一列被長文本撐開,兩列不再等寬。

原因

Grid 在 未限制可用寬度(即自身 Width=Auto)時,* 列退化為 Auto 行為,按內容測量寬度分配空間。

三種解決方案

1. 給 Grid 限制最大寬度(推薦)


<Grid MaxWidth="800">  <!-- 或寬度綁定父容器 ActualWidth -->
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="123456789" TextTrimming="CharacterEllipsis"/>
</Grid>

父容器(如 Window、Border、ScrollViewer)必須給 Grid 傳遞確定的佈局槽位。

2. 使用 SharedSizeGroup 跨 Grid 同步列寬(進階)


<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" SharedSizeGroup="Col1"/>
        <ColumnDefinition Width="Auto" SharedSizeGroup="Col2"/>
    </Grid.ColumnDefinitions>
</Grid>

需在父級設置 Grid.IsSharedSizeScope="True"。適合多行對齊場景。

3. 改用 UniformGrid(最簡暴力)


<UniformGrid Columns="2">
    <TextBlock>123456789</TextBlock>
    <TextBlock>第二列</TextBlock>
</UniformGrid>

UniformGrid 強制所有列等寬、所有行等高,無需定義 ColumnDefinitions。

核心原則

星號列(*)只有在 Grid 擁有確定可用寬度(非 Auto)時才按比例分配。 讓 Grid 置於有確定寬度的父容器中,或顯式給 Grid 寬度/MaxWidth。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved