.NET GridSplitter调整一列

时间:2016-02-17 11:13:42

标签: wpf xaml menu grid gridsplitter

我的问题很具体,没有找到任何相关内容。所以关于我生命的第一个问题,我们走了。 我是WPF和XAML全球新手,所以如果你有任何改进我的代码的话,请不要犹豫。

我尝试实现的目标 我有一个工作区,周围有4个菜单。此菜单的可见性由顶部的切换按钮决定,但我删除了所有这些,因此我的代码更清晰。但我想要弹出的菜单(我没有使用弹出来真正控制大小和位置,在某个容器内,tjose菜单)。 左侧有2个菜单,右侧有2个菜单。在每一侧,两个菜单不能同时打开。同样的事情,我把这一切都抹去了。 我希望我的菜单可以调整大小。但我左边的两个菜单没有相同的大小,应该单独调整大小。

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="Aqua" Name="LeftMenu">
        <Grid Name="LeftMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
                <ColumnDefinition Width="5"/>
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0"  Name="MenuContent1"/>
            <GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndCurrent" HorizontalAlignment="Stretch"/>
        </Grid>
    </Grid>
    <Grid Grid.Column="1" Name="Workspace"/>
    <Grid Grid.Column="2" Background="Aqua" Name="RightMenu">
        <Grid Name="RightMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="5"/> 
                <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
            </Grid.ColumnDefinitions>
            <GridSplitter Grid.Column="0" ResizeBehavior="CurrentAndNext" HorizontalAlignment="Stretch"/> 
            <Grid Grid.Column="1" Name="MenuContent2"/>
        </Grid>
    </Grid>

</Grid>

*我只在每一侧显示一个菜单,因为我删除了可见性条件,但第二个菜单是相同的,对宽度有效。

我的问题是什么? 正如您所看到的,我使用GridSplitter来调整组成每个菜单的一个列网格。 虽然我完全在左边得到了我想要的行为,但它在右边不起作用。 当我使用Gridsplitter时,gridsplitter列(“current”)的大小调整,而不是菜单列。我使用了“CurrentandNext”值,因为它似乎合乎逻辑,但显然还不够。 如果我使用maxWidth和minWidth修复GridSplitter宽度,则不会重置任何内容,GridSplitter不会移动。

我希望我足够清楚并欢迎任何帮助!

2 个答案:

答案 0 :(得分:0)

你这样做完全错了。

GridSplitters用于调整列和行的大小。

假设您有一个Grid to to Columns:

<Grid Name="RightMenu1">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="5"/> 
    <ColumnDefinition MinWidth="200" MaxWidth="500" Width="300"/>
  </Grid.ColumnDefinitions>

  <GridSplitter Grid.Column="0" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="3" Background="Black"/> 

  <Border Grid.Column="0" Background="Red" Margin="0,0,3,0"/>
  <Border Grid.Column="1" Background="Blue"/>
</Grid>

您必须将GridSplitter保留在两个列之间,以调整列的大小。在这种情况下,右对齐水平和垂直拉伸。

答案 1 :(得分:0)

<块引用>

我需要有两个“面板”,不能同时打开,但大小不同...

我确实为问题 WPF How to build docked resizable expanders and grid using XAML only? 制定了解决方案,它也适用于您的问题。

您在调整列大小时犯了一点错误。

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="Aqua" Name="LeftMenu">
        <Grid Name="LeftMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0"  Name="MenuContent1" MinWidth="200" MaxWidth="500" Width="300"/>
            <GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndCurrent" HorizontalAlignment="Stretch" Width="5"/>
        </Grid>
    </Grid>
    <Grid Grid.Column="1" Name="Workspace"/>
    <Grid Grid.Column="2" Background="Aqua" Name="RightMenu">
        <Grid Name="RightMenu1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <GridSplitter Grid.Column="0" ResizeBehavior="CurrentAndNext" HorizontalAlignment="Stretch" Width="5"/>
            <Grid Grid.Column="1" Name="MenuContent2" MinWidth="200" MaxWidth="500" Width="300"/>
        </Grid>
    </Grid>

</Grid>