宽度调整后,网格列不会折叠以适合内容

时间:2016-03-29 14:46:33

标签: wpf xaml

我有一个包含树视图的网格列,当按下ToggleButton时,树视图可以缩小到16的宽度。该列设置为Width="Auto",我认为这是缩小行为的原因。

问题是在列的右侧有一个网格分割器,因此用户可以根据需要增加/减小宽度。如果用户执行此操作,然后按下ToggleButton,则列的内容将缩小为16,但列本身不会缩小。

有谁知道如何确保列在这些情况下缩小?我猜测它与列宽从auto变为一定值有关,但我不能想到一旦内容缩小就如何解决这个问题。到目前为止,这是我的代码:

<Grid Name="ContentGrid" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="0">

            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" x:Name="TreeColumn"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*" MinWidth="400" />

            </Grid.ColumnDefinitions>

            <UserControl DockPanel.Dock="Left" Grid.Row="0" Grid.Column="0" Padding="0" x:Name="TreeControl" >
                <local:TreeViewControl x:Name="mainTreeView" Height="Auto" />
            </UserControl>

            <GridSplitter Grid.Row="0" Grid.Column="1" Margin="0,0,0,0" 
                  Width="4" Background="Transparent" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />

            <Grid Name="LandingPageGrid" Grid.Row="0" Grid.Column="2">

编辑:我已尝试在列的定义中添加DataTrigger,但这并没有奏效。

<ColumnDefinition Width="Auto" x:Name="TreeColumn">
                    <ColumnDefinition.Style>
                        <Style>
                            <Style.Triggers>
                                <DataTrigger {Binding Path=IsChecked, ElementName=CollapseIcon}" Value="True">
                                    <Setter Property="ColumnDefinition.Width" Value="Auto"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ColumnDefinition.Style>
                </ColumnDefinition>

1 个答案:

答案 0 :(得分:0)

因此经过多次调试,许多徒劳无功的尝试后,我终于将代码隐藏中的错误宽度设置为TreeViewControl。它不漂亮,所以如果有人想提出更好的答案,请这样做,我很乐意将您的代码标记为解决方案。

private void CollapseIcon_Checked(object sender, RoutedEventArgs e)
        {
            TreeControl.Width = 16;
            TreeControl.HorizontalAlignment = HorizontalAlignment.Left;
            ((FrameworkElement) TreeControl.Parent).Width = 16;

            var parentColumn = (((Grid) ((FrameworkElement) TreeControl.Parent).Parent).ColumnDefinitions)[0];
            parentColumn.Width = GridLength.Auto;
        }

        private void CollapseIcon_Unchecked(object sender, RoutedEventArgs e)
        {
            TreeControl.Width = Double.NaN;
            TreeControl.HorizontalAlignment = HorizontalAlignment.Stretch;
            ((FrameworkElement) TreeControl.Parent).Width = Double.NaN;

            var parentColumn = (((Grid)((FrameworkElement)TreeControl.Parent).Parent).ColumnDefinitions)[0];
            parentColumn.Width = GridLength.Auto;
        }