奇妙な問題が発生しました...
GridSplitter を使用してグリッドの列のサイズを変更すると、グリッドの列で定義されたトリガーが無効 (または非アクティブ化) になるようです。
これが私のセットアップです:
グリッドには、次のように定義された 3 つの列があります。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="Auto"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="4*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItemViewModels.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
</Grid.ColumnDefinitions>
3 番目の列のコントロールの ItemsSource を構成する項目がない場合、2 番目と 3 番目の列 (それぞれ GridSplitter と補助項目コントロールをホストする) に幅 0 が割り当てられることが予想されます。
これは、スプリッターに触れない限りうまく機能します (補助コントロールのすべてのタブを閉じると、最初の列だけが表示されたままになります)。
スプリッターを移動すると問題が発生し、列 ##0 と 2 の間の比率が効果的に変化します。このようなシナリオでは、右側のコントロールのすべての項目が閉じられても、これらの列の幅はリセットされません。
これは、GridSplitter が XAML での定義を「覆す」ことに関係していると思われます。
誰かがこの理論を確認/反証し、問題を回避する方法を提案できますか?