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

本文关键字:网格 2个 绑定 xaml | 更新日期: 2023-09-27 18:08:52

我希望有人能让这件事变得简单。

我有一个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>

不用说,上面的方法不起作用。即使这样,也只允许使用第一个分配器,而不允许使用第二个。有人能告诉我吗?

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

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

在玩了很多之后,我可以接近但不完全是我想要的。因此,我最终在每个splitter列中放置一个Grid,而不是gridsplitter,并处理Grid上的PreviewMouseDown事件以及父控件的PreviewMouseUp和PreviewMouseMove事件来实现我自己的调整大小。这用于检测第1列和第3列的拖动,并同时调整第0列和第3列的大小。遗憾的是,代码已经与我控制的其余部分交织在一起,所以不容易发布。也许有一天,当我的xaml改进后,我将能够将功能分解成一个适当的可重用控件。