1

セットアップ:

ウィンドウが読み込まれると最初は非表示になり、特定のユーザー アクションで表示されるようになる 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* 幅から縮小しないことです。 ) いつ非表示にするかを制御します。

4

1 に答える 1

0

ListView をどのように非表示/表示していますか? この質問は、Width プロパティを 0 (または表示するためにゼロ以外) に設定することで、そうしていることを暗示しているようです。代わりに、 Visibilityプロパティを使用してみてください(非表示にする場合は "Collapsed"、表示する場合は "Visible" に設定します)。これにより、列の幅が再評価されるはずです。

アップデート:

更新された質問に基づいて、このソリューションをチェックすることをお勧めします: http://www.codeproject.com/KB/grid/ListView_layout_manager.aspx

ここから取得しました FWIW: WPF : ListView の GridView の最後の列を拡張します

于 2011-09-26T15:52:41.237 に答える