在GridSplitter中,DataGridColumn宽度强制父级的最大宽度

时间:2016-10-28 20:22:35

标签: c# wpf xaml datagrid gridsplitter

我试图创建一个分为两个部分的窗口:

DataGrid inside GridSplitter

我注意到有些属性似乎与彼此冲突。即:

  • Window.Width属性。
  • ColumnDefinition.MinWidth属性(特别是第3列)
  • DataGridTextColumn.Width="*"属性。

使用下面XAML中定义的属性值,我注意到最后DataGridTextColumn的宽度导致父Grid扩展到考虑右侧{{Grid的最大允许值1}}的最小宽度。 不过,我的期望是DataGridTextColumn会填充剩余的可用空间,受DataGrid约束。

我还注意到DataGridTextColumn引起的扩展/推送行为只发生在ColumnDefinition.MinWidthWindow.Width属性的某些值上(也可以在运行时调整大小)奇怪的'行为'。

我希望位于Grid旁边的每个顶级Grids(左侧和右侧GridSplitter)具有最小宽度,默认宽度为70%,分别占窗口的30%。但我也希望DataGrid中的最后一列填补剩余的区域。 如果没有DataGrid超出界限,我怎样才能实现这一目标?

<Window x:Class="GridSplitterTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:GridSplitterTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="7*" MinWidth="160"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="3*" MinWidth="155"/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0">
            <!-- This is the left Grid -->
            <DataGrid Margin="10">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column1" MinWidth="60"/>
                    <DataGridTextColumn Header="Column2" MinWidth="60"/>
                    <DataGridTextColumn Header="Column3" MinWidth="60"/>
                    <DataGridTextColumn Header="Column4 (Fill)" MinWidth="90" Width="*"/>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
        <GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="6" Background="Red"/>
        <Grid Grid.Column="2">
            <!-- This is the right Grid -->
        </Grid>
    </Grid>
</Window>

0 个答案:

没有答案