サイズ変更可能なエキスパンダーのようなものが欲しいのですが。私の基本的な考えは次のようなものでした:
<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>
これに伴う問題:グリッドスプリッターを移動してエキスパンダーを折りたたむと、大きな空の領域ができました。どうすれば列全体を崩壊させることができますか?または、エキスパンダーを「サイズ変更可能」にする別の方法はありますか
何を達成しようとしているのかわかりませんが、概念的には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>
編集:不要と思われるため、最初の列からすべてのトリガーを削除しました。
また、これを垂直に機能させるには、GridSplitterの HorizontalAlignment
をStretch
に設定する必要があります。そうしないと、デフォルトで幅がゼロになります(もちろん、他のすべての方向は-特定のものも適応させる必要がありますが、それは簡単です)
HorizontalAlignmentは、実際には依存関係プロパティであるMicrosoft.NETプロパティアクセサーです。この特定の依存関係プロパティでは、サブクラス化された要素、特にコントロールで、見かけの「デフォルト」値が異なる方法で設定されることがよくあります。 [...]たとえば、LabelがFrameworkElementから直接HorizontalAlignmentを継承している場合でも、LabelコントロールのHorizontalAlignmentの見かけの「デフォルト」はLeftになります。これは、その値が、スタイルのコントロールテンプレート内のデフォルトスタイルのラベル内でリセットされたためです。
多分これはあなたの「列の崩壊」問題を解決するのに役立つでしょう
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;
}