0

我将两个控件放在一个网格列中,并使第一个或第二个控件可见。由于网格列的宽度设置为自动,它将根据可见子项的宽度调整自身大小......除非我使用网格拆分器更改列的宽度。
现在,如果我切换子控件的可见性,该列不会再根据其内容调整自身大小。如何建立原始行为?

谢谢!

编辑:
该列的 width 属性是绑定到再次设置为 GridLength.Auto 的属性的数据(归功于 Martin Moser),但 Snoop 告诉我这将被忽略。所以(新)问题是如何将列的宽度设置回自动。

编辑:
一个例子

  • 启动应用程序
  • 使用复选框切换红色面板的可见性
  • => 正确调整第一列的大小
  • 使用拆分器调整列大小
  • 选中/取消选中复选框
  • => 不再调整第一列的大小

XAML:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300"
        Width="300">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="CONV_KEY"></BooleanToVisibilityConverter>
    </Window.Resources>
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <DockPanel Grid.Column="0" Width="100" Background="Red"
                Visibility="{Binding ElementName=_checkBox,Path=IsChecked,Converter={StaticResource CONV_KEY}}">
        </DockPanel>
        <DockPanel Grid.Column="0" Width="10" Background="Green" HorizontalAlignment="Left"></DockPanel>
        <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext"></GridSplitter>
        <CheckBox x:Name="_checkBox" Grid.Column="3" VerticalAlignment="Top">Toggle</CheckBox>
    </Grid>
</Window>
4

2 回答 2

1

您是否尝试在需要时再次将 columndefinition 的 Width 设置为 GridLength.Auto?

于 2009-01-30T09:59:41.073 回答
0

这是一个相当黑客,但尝试将宽度设置为某个固定值,然后返回自动,这应该会触发更改,并且该值不应该被忽略,也许它正在工作......

于 2009-01-30T10:50:26.993 回答