如何在xaml中将2个网格列宽度绑定在一起

时间:2015-08-20 15:36:53

标签: c# wpf 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>

毋庸置疑,上述方法无效。即使它确实如此,它只允许使用第一个分离器而不是第二个分离器。任何人都能解释一下吗?

2 个答案:

答案 0 :(得分:0)

<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并在第一列和最后一列中使用了两个辅助网格

答案 1 :(得分:0)

经过多次游戏,我可以接近但不完全是我想要的。所以我最终在每个分区列中放置一个Grid而不是GridSplitters并处理Grid上的PreviewMouseDown事件以及父控件的PreviewMouseUp和PreviewMouseMove事件来实现我自己的调整大小。这用于检测第1列和第3列中的拖动,并将colunmns 0和3一起调整大小。可悲的是,代码变得与我控制的其他部分交织在一起,所以不容易发布。也许有一天,当我的xaml改进时,我将能够将功能分解为适当的可重用控件。