WPF中利用后台代码实现窗口分栏动态改变

时间:2021-06-17 08:21:39

在WPF中实现窗口分栏并能够通过鼠标改变大小已经非常容易,例如将一个GRID分成竖排三栏显示,就可以将GRID先分成5列,其中两个固定列放GridSplitter

<Grid Background="#FFEDFFFB" Name="grid1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="3*" />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>

但是每次改变窗口的大小,我们都要去拖动GridSplitter,这里为了偷懒,我们能不能直接某些按钮或选择框,来改变窗口的显示甚至隐藏。由于是改变每一栏的宽度,这里我们自然想到的是Grid.ColumnDefinitions的Width属性,他是GridLength类型参数,所以我们只要重新构造一个GridLength参数给Width就能够通过代码改变窗口大小。在http://technet.microsoft.com/zh-cn/library/system.windows.gridlength_members(v=vs.90).aspx这里,查看GridLength的构造函数,有两种方法,当然我们可以利用第一种方法GridLength(Double)直接给出每一栏的宽度,但是如果以后我们还想在窗口中拖动GridSplitter改变窗口大小就不再可能了。

所以,这里我用第二种构造函数GridLength(Double, GridUnitType),其中GridUnitType是一个枚举变量,有三个成员,相信大家看了其说明,也大概清楚每种变量的功能了。好了,下面看代码中如何改变窗口大小。

WPF中利用后台代码实现窗口分栏动态改变

grid1.ColumnDefinitions[].Width = , GridUnitType.Star);
                grid1.ColumnDefinitions[].Width = new GridLength(1.5, GridUnitType.Star);
                grid1.ColumnDefinitions[].Width = new GridLength(1.5, GridUnitType.Star);

需要注意的是这里我们是改变的第0,2,4列的宽度,因为第1,3列是GridSplitter。这样我们不仅可以在界面上用鼠标拖动GridSplitter动态改变每一栏的大小,还能在代码中实现我们想要的效果。