0

グリッド列に 2 つのコントロールを配置し、最初または 2 番目のコントロールを表示します。グリッド列の幅は自動に設定されているため、表示される子の幅に応じてサイズが変更されます...グリッドスプリッターを使用して列の幅を変更しない限り。
子コントロールの表示を切り替えると、列のサイズがコンテンツに合わせて変更されなくなりました。元の動作を確立するにはどうすればよいですか?

ありがとう!

編集:
列の 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

0

これはかなりのハックですが、幅を固定値に設定してからAutoに戻してみてください。これにより、変更がトリガーされ、値が無視されないようにする必要があります。おそらく機能しています...

于 2009-01-30T10:50:26.993 に答える