セットアップ:
ウィンドウが読み込まれると最初は非表示になり、特定のユーザー アクションで表示されるようになる GridView を含む ListView。
狙い:
GridView の列の相対的な幅を設定できます。
問題:
私が必要とすることは、幅にコンバーターを使用するか (ここでの回答に似たもの)、または ListView に動作を追加することによって実現できます (このソリューションを参照)。両方のアプローチは有効であるように見えますが、最初からレンダリングされたコントロールに対してのみです。私の場合、計算が行われるとき、ActualWidth は常に 0 であり、ListView が表示されるときにこれらの計算は繰り返されません。
したがって、ここでの本当の問題は、ListView の ActualWidth が 0 を超えたときに列の幅を再評価する方法です。
ソリューションは、コード ビハインドを使用せずに XAML レベルであることが望ましいですが、それが唯一の代替手段である場合は、それも可能です ;-)
助言がありますか?
PS以下の Chris の質問に続いて、ListView がどのように非表示/表示されるかについて説明します。これは別のコンテナー コントロールの子であり、Grid 列でホストされ、その列の幅はトリガーによって操作されます。
<ColumnDefinition>
<ColumnDefinition.Style>
<Style>
<Setter Property="ColumnDefinition.Width" Value="4*"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=OpenItems.Count}" Value="0">
<Setter Property="ColumnDefinition.Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
代わりに、ListView のコンテナー自体に同様のトリガーを適用しようとしました (Collapsed と Visible の間の Visibility を操作するため)、それに関する問題は、Column が元の 4* 幅から縮小しないことです。 ) いつ非表示にするかを制御します。