WPF控件自适应屏幕_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF控件自适应屏幕

WPF控件自适应屏幕

 2017/9/28 22:43:08  _AlexYIN  程序员俱乐部  我要评论(0)
  • 摘要:如果说界面设计,那么自适应问题一定无法避免,今天就来分享一下,wpf如何实现自适应,先看一下效果:(文末添加源代码下载)基本思路就是用Grid的网格,进行宽度的自动填充适应,不过对于复杂的页面,布局起来可能比较麻烦,这里推荐结合DockPanel和Grid一起使用,对于页面一些不需要自适应的模块,可以采用DockPanel.Dock="Top/Left/Right/Bottom",对于需要自适应的部分(一般都是界面中间的主体部分),采用DockPanel自动填充,然后再内部应用grid网格布局
  • 标签:控件 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可能相对复杂,不但要设置  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

 

发表评论
用户名: 匿名