我的问题很具体,没有找到任何相关内容。所以关于我生命的第一个问题,我们走了。 我是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不会移动。
我希望我足够清楚并欢迎任何帮助!
答案 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>