WPF控件自適應屏幕


概述 

如果說界面設計,那么自適應問題一定無法避免,今天就來分享一下,wpf如何實現自適應,先看一下效果:(文末添加源代碼下載)

       

 

思路

基本思路就是用 Grid 的網格,進行寬度的自動填充適應,  不過對於復雜的頁面,布局起來可能比較麻煩, 這里推薦結合 DockPanel 和 Grid 一起使用,對於頁面一些不需要自適應的模塊,可以采用 DockPanel.Dock="Top/Left/Right/Bottom",   對於需要自適應的部分(一般都是界面中間的主體部分), 采用DockPanel自動填充,  然后再內部應用grid 網格布局。   這樣可以把大面積的界面拆分開來,   降低復雜度。

 

 

實現

關於文章開頭圖中的樣式    先用DockPanel 將內容拆分為上下兩部分,上部對於TextBox, Button應用Grid,定義行列賦值為*,  即可實現寬度自動平均分配, 如果想實現1:1:2的效果,可以設置為*,*,2*,具體應用可參考下面代碼。    

<Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid Grid.Row="0">
                    <Border BorderBrush="CadetBlue" BorderThickness="2">
                        <TextBlock TextAlignment="Center" FontSize="20" Text="王者農葯"/>
                    </Border>
                </Grid>
                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="3*"/>
                    </Grid.ColumnDefinitions>
                    <Grid Grid.Column="0">
                        <Border BorderBrush="Red" BorderThickness="1">
                            <TextBlock TextAlignment="Center" FontSize="20" Text="推塔"/>
                        </Border>
                    </Grid>
                    <Grid Grid.Column="1">
                        <Border BorderBrush="Yellow" BorderThickness="1">
                            <TextBlock TextAlignment="Center" FontSize="20" Text="競技"/>
                        </Border>
                    </Grid>
                    <Grid Grid.Column="2">
                        <Border BorderBrush="Blue" BorderThickness="1">
                            <TextBlock TextAlignment="Center" FontSize="20" Text="王者不可阻擋"/>
                        </Border>
                    </Grid>
                </Grid>
                <Grid Grid.Row="2">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid Grid.Column="0">
                        <Button Background="MediumSpringGreen" FontSize="20" Content="匹配"/>
                    </Grid>
                    <Grid Grid.Column="1">
                        <Button Background="Coral" FontSize="20" Content="排位"/>
                    </Grid>
                </Grid>
            </Grid>

 

DataGrid的特殊處理

對於下半部分的DataGrid可能相對復雜,不但要設置  ColumnWidth="Auto",  還要在后端添加如下代碼來重新計算並更新列寬度:

            DataGridHeroList.Loaded += (s, e) => { DataGridHeroList.Columns.AsParallel().ForEach(column => { column.MinWidth = column.ActualWidth; column.Width = new DataGridLength(1, DataGridLengthUnitType.Star); }); };

   

下載

如有任何疑問,歡迎留言,一起討論~~

示例代碼下載     鏈接: https://pan.baidu.com/s/1boZCKLx

                                 密碼: fsq5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM