成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文掌握WPF Grid:從零基礎到界面布局大師

開發 前端
Grid是WPF中最強大的布局控件之一,掌握Grid的使用可以幫助我們創建靈活且專業的用戶界面。通過合理使用行列定義、跨行跨列、共享尺寸等特性,可以實現各種復雜的布局需求。

在Winform中可以用Table控件實現,但說實話在Winform中的Table控件做的實在不好用,不少功能的邏輯實在不敢恭維。Grid(網格)是WPF中最靈活和最常用的布局控件之一。它允許我們將界面劃分為行和列,形成類似表格的結構,可以精確控制元素的位置和大小。Grid非常適合創建復雜的用戶界面布局。這個可以說是WPF功能最全的布局控件了,這個比Winform中的Table好用太多了。。。

Grid的基本屬性

  • RowDefinitions: 定義行
  • ColumnDefinitions: 定義列
  • Grid.Row: 設置元素所在行
  • Grid.Column: 設置元素所在列
  • Grid.RowSpan: 設置元素跨越的行數
  • Grid.ColumnSpan: 設置元素跨越的列數

Grid的尺寸單位

Grid支持三種尺寸單位:

  1. 固定像素值(如 Width="100")
  2. 自動大小(Auto)
  3. 比例大小(*)

實例演示

基本網格布局

<Window x:Class="AppGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppGrid"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!-- 定義3行2列的網格 -->
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <!-- 自動高度 -->
            <RowDefinition Height="*"/>
            <!-- 占用剩余空間 -->
            <RowDefinition Height="100"/>
            <!-- 固定高度100像素 -->
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <!-- 占用2份寬度 -->
            <ColumnDefinition Width="*"/>
            <!-- 占用1份寬度 -->
        </Grid.ColumnDefinitions>

        <!-- 第一行第一列 -->
        <Button Grid.Row="0" Grid.Column="0" Content="按鈕1" Margin="5"/>

        <!-- 第一行第二列 -->
        <Button Grid.Row="0" Grid.Column="1" Content="按鈕2" Margin="5"/>

        <!-- 第二行第一列,跨兩列 -->
        <TextBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" 
                 Margin="5" TextWrapping="Wrap" 
                 Text="這是一個跨列的文本框"/>

        <!-- 第三行第一列 -->
        <ListBox Grid.Row="2" Grid.Column="0" Margin="5">
            <ListBoxItem>列表項1</ListBoxItem>
            <ListBoxItem>列表項2</ListBoxItem>
        </ListBox>

        <!-- 第三行第二列 -->
        <Button Grid.Row="2" Grid.Column="1" Content="按鈕3" Margin="5"/>
    </Grid>
</Window>

圖片圖片

復雜布局示例(登錄界面)

<Window x:Class="AppGrid.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppGrid"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800">
    <Grid>
        <!-- 定義行 -->
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <!-- 標題行 -->
            <RowDefinition Height="*"/>
            <!-- 內容區 -->
            <RowDefinition Height="Auto"/>
            <!-- 按鈕行 -->
        </Grid.RowDefinitions>

        <!-- 標題 -->
        <TextBlock Grid.Row="0" Text="用戶登錄" 
                   FontSize="24" HorizontalAlignment="Center" 
                   Margin="0,20,0,20"/>

        <!-- 登錄表單Grid -->
        <Grid Grid.Row="1" Margin="20">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="10"/>
                <!-- 間隔 -->
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <!-- 用戶名行 -->
            <TextBlock Grid.Row="0" Grid.Column="0" Text="用戶名:"
                       VerticalAlignment="Center" Margin="0,0,10,0"/>
            <TextBox Grid.Row="0" Grid.Column="1" Height="25"/>

            <!-- 密碼行 -->
            <TextBlock Grid.Row="2" Grid.Column="0" Text="密碼:"
                       VerticalAlignment="Center" Margin="0,0,10,0"/>
            <PasswordBox Grid.Row="2" Grid.Column="1" Height="25"/>
        </Grid>

        <!-- 按鈕區域 -->
        <StackPanel Grid.Row="2" Orientation="Horizontal" 
                    HorizontalAlignment="Center" Margin="0,0,0,20">
            <Button Content="登錄" Width="80" Height="30" Margin="0,0,20,0"/>
            <Button Content="取消" Width="80" Height="30"/>
        </StackPanel>
    </Grid>
</Window>

圖片圖片

Grid布局技巧

使用Grid.IsSharedSizeScope

當需要多個Grid具有相同的列寬時,可以使用SharedSize特性:

<StackPanel Grid.IsSharedSizeScope="True">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="FirstCol"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="標簽1:" Margin="5"/>
        <TextBox Grid.Column="1" Margin="5"/>
    </Grid>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="FirstCol"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="較長的標簽2:" Margin="5"/>
        <TextBox Grid.Column="1" Margin="5"/>
    </Grid>
</StackPanel>

圖片圖片

這是兩個Grid,通過SharedSizeGroup 綁定控制兩個列的寬一樣。

使用Grid分隔線

<Grid ShowGridLines="True">
    <!-- 顯示網格線,便于開發調試 -->
</Grid>

注意

  1. 合理使用尺寸單位

a.固定像素:用于確定大小的元素

b.Auto:根據內容自適應

c.星號(*):按比例分配剩余空間

  1. 避免嵌套過深
  • Grid嵌套不要超過3層
  • 考慮使用其他布局控件組合
  1. 合理使用Margin和Padding
  • Margin用于控件之間的間距
  • Padding用于控件內容與邊框的間距
  1. 使用Grid.IsSharedSizeScope
  • 需要對齊多個Grid的列寬時使用
  • 提高布局的一致性

總結

Grid是WPF中最強大的布局控件之一,掌握Grid的使用可以幫助我們創建靈活且專業的用戶界面。通過合理使用行列定義、跨行跨列、共享尺寸等特性,可以實現各種復雜的布局需求。在實際開發中,建議結合其他布局控件(如StackPanel、DockPanel等)一起使用,以達到最佳的布局效果。

責任編輯:武曉燕 來源: 技術老小子
相關推薦

2017-11-28 15:20:27

Python語言編程

2018-08-31 14:51:30

人工智能深度學習機器學習

2017-10-18 17:16:59

ZeroHeroPython

2020-10-20 14:50:26

Python數字字符串

2023-10-26 08:25:39

KubernetesKubeadm

2022-12-20 07:39:46

2023-12-21 17:11:21

Containerd管理工具命令行

2020-11-23 09:46:18

Java方法權限

2022-10-21 17:24:34

契約測試定位

2021-05-12 18:22:36

Linux 內存管理

2025-05-21 09:32:28

2023-10-24 11:44:21

2022-09-27 13:34:49

splice零拷貝原理

2022-04-26 06:04:11

零信任網絡安全

2025-04-07 05:01:00

MCP上下文協議LLM?

2020-10-09 07:56:52

Linux

2023-12-15 09:45:21

阻塞接口

2025-04-07 03:02:00

電腦內存數據

2025-02-06 13:18:15

2019-06-23 15:21:42

Google谷歌平板
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区三区四区 | 国产精品99| 亚洲成人精选 | 国产一区二区久久久 | 色视频网站 | 国产精品久久久久久久久久久久冷 | 亚洲欧美日本国产 | 另类二区 | 亚洲精品中文字幕在线观看 | 在线观看免费福利 | 国产一区二| 青青草在线视频免费观看 | 欧美成人精品在线 | 亚洲精彩视频在线观看 | 成人h动漫亚洲一区二区 | 国产精品视频一区二区三区不卡 | 99欧美精品 | 狠狠艹| 久久看片 | 国产高清一区二区 | 国产激情网 | 精品视频一区二区三区在线观看 | 一区二区影视 | 精品一区二区久久久久久久网站 | 国产精品美女久久久久久免费 | 午夜码电影 | 国产伦精品一区二区三区视频金莲 | 午夜伦4480yy私人影院 | 免费观看av网站 | 中文字幕亚洲无线 | 亚洲免费一区 | 欧美日韩专区 | 免费一级欧美在线观看视频 | 精品视频国产 | 久久久国产精品网站 | 成人免费观看视频 | 一区二区欧美在线 | 国产中文在线观看 | 欧美啪啪 | 久久国产综合 | 国产精品久久久久久一区二区三区 |