16

サイズ変更可能な Expander のようなものが欲しいです。私の基本的なアイデアは次のようなものでした:

<Grid HorizontalAlignment="Left">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="2" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Expander Grid.Column="0" ExpandDirection="Right">
          ...
    </Expander>

    <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />

    ...
</Grid>

これに関する問題: グリッド スプリッターを移動してエキスパンダーを折りたたむと、大きな空き領域ができてしまいます。列全体を折りたたむにはどうすればよいですか? または、エキスパンダーを「サイズ変更可能」にする別の方法はありますか

4

2 に答える 2

21

あなたが何を達成しようとしているのかはわかりませんが、概念的にGridは の一部であるべきだと思いExpander.Contentます。これはうまくいきますか?

<Expander Header="Test" ExpandDirection="Right" HorizontalAlignment="Left" Background="LightBlue">
    <Expander.Content>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="5"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="Lorem ipsum dolor sit"/>
            <GridSplitter Grid.Column="1" Width="5" ResizeBehavior="PreviousAndCurrent" ResizeDirection="Columns"/>
        </Grid>
    </Expander.Content>
</Expander>

編集:不要と思われるため、最初の列からすべてのトリガーを削除しました。

また、これを垂直に機能させるには、GridSplitterHorizontalAlignmentを に設定する必要がありますStretch。そうしないと、デフォルトで幅がゼロになります (もちろん、方向固有の他のすべてのものも同様に調整する必要がありますが、それは簡単です)。

Horizo​​ntalAlignment は、実際には依存関係プロパティである Microsoft .NET プロパティ アクセサーです。この特定の依存関係プロパティは、サブクラス化された要素 (特にコントロール) で、明らかに「デフォルト」値が異なるように設定されていることがよくあります。[...] たとえば、Label が FrameworkElement から直接 Horizo​​ntalAlignment を継承していても、Label コントロールの Horizo​​ntalAlignment の明らかな「デフォルト」は Left になります。これは、スタイルのコントロール テンプレート内で、Label の既定のスタイル内でその値がリセットされたためです。

于 2011-04-05T15:22:28.060 に答える
1

たぶん、これは「列の崩壊」の問題を解決するのに役立ちます

XAML:

追加し<Grid> Name="expGrid"て追加<Expander> Collapsed="Expander_Collapsed"

C# コード:

private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
  var colomnIndex = Grid.GetColumn(sender as Expander);
  var colomn = expGrid.ColumnDefinitions[colomnIndex];
  colomn.Width = GridLength.Auto;
}
于 2011-04-05T15:14:17.923 に答える