我有两个相同的分区网格:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" />
<Button Grid.Row="2" />
<GridSplitter Grid.Row="1" Height="4" HorizontalAlignment="Stretch" />
</Grid>
如何让它们同步调整大小?因此,两个网格的行高将相同。
答案 0 :(得分:2)
您需要使用Shared Size Groups。将属性SharedSizeGroup="some_label"
添加到要同步调整大小的行或列定义。
此外,您需要为包含两个网格的某个容器定义Grid.IsSharedSizeScope="true"
(在您的情况下为选项卡控件)。
答案 1 :(得分:1)
看起来我可以通过简单的绑定来做到这一点:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="{Binding Path=MySize, Mode=TwoWay}" />
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Grid.Row="0" />
<Button Grid.Row="2" />
<GridSplitter Grid.Row="1" Height="4" HorizontalAlignment="Stretch" />
</Grid>
MySize在哪里
private GridLength mySize;
public GridLength MySize
{
get { return mySize; }
set
{
if (mySize == value) return;
mySize = value;
OnPropertyChanged("MySize");
}
}
注意: Mode = TwoWay,因为与其他conrols不同,RowDefinition不会将其模式默认为TwoWay
答案 2 :(得分:0)
我认为实现这一目标的唯一方法是以编程方式:
在 XAML 的两个网格中注册Gridsplitter的DragCompleted事件,并为每个网格命名:
<GridSplitter DragCompleted="GridSplitter_DragCompleted1" Grid.Row="1" Height="4" HorizontalAlignment="Stretch" />
在 CodeBehind 中同步RowDefinitions的高度。由于grisplitter仅影响附加行/列的Row / ColDefinitions,因此我们必须在此处同步rowdefinitions。做其他事情,比如设置gridsplitters位置是行不通的。
private void GridSplitter_DragCompleted1(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
SyncRowDefinitions(Grid1, Grid2);
}
private void GridSplitter_DragCompleted2(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
SyncRowDefinitions(Grid2, Grid1);
}
private void SyncRowDefinitions(Grid sourceGrid, Grid targetGrid)
{
for (int i = 0; i < sourceGrid.RowDefinitions.Count; i++)
{
targetGrid.RowDefinitions[i].Height = sourceGrid.RowDefinitions[i].Height;
}
}
编辑:如果需要,您也可以在其最初加载后的其他出现状态(例如整个网格的大小)中同步网格,依此类推...