[英]How to bind 2 grid column widths together in xaml
我希望有人可以简化这一过程。
我有一个包含5列的网格,第1列和第3列包含分隔符。 我想发生的事情是,当我移动一个拆分器而另一个移动以匹配时,效果是将第一列和最后一列的大小放在一起。
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" x:Name="col1"/>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="{Binding ElementName=col1, Path=ActualWidth}" />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Background="Red"/>
<GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" Background="Red"/>
</Grid>
毋庸置疑,上述方法无效。 即使这样做,也只能使用第一个分离器,而不能使用第二个。 谁能阐明一些想法?
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" x:Name="col1"/>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="5" />
<ColumnDefinition Width="{Binding ElementName=helperGrid, Path=ActualWidth}" />
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Background="Red"/>
<GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" Background="Red"/>
<Grid Grid.Column="0" x:Name="helperGrid" Width="{Binding ElementName=helperGrid2, Path=ActualWidth}" MinWidth="100"/>
<Grid Grid.Column="4" x:Name="helperGrid2"/>
</Grid>
这对我有用,我将第一列的宽度更改为auto,并在第一列和最后一列中使用了两个辅助网格
经过大量的玩耍,我可以接近但并不完全是我想要的东西。 因此,我最终在每个拆分器列(而不是GridSplitters)中放置一个Grid,并处理了Grid上的PreviewMouseDown事件以及父控件的PreviewMouseUp和PreviewMouseMove事件,以实现我自己的调整大小。 这用于检测第1列和第3列中的拖动并一起调整第0列和第3列的大小。 可悲的是,代码已经与我的其余控件交织在一起,因此发布起来并不容易。 也许有一天,当我的xaml有所改进时,我就可以将功能分解为适当的可重用控件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.