この記事では、WPF コレクション コントロールのセパレーター ItemsControl Separator の実装について詳しく紹介します。興味のある方は参照してください。
WPF コレクション コントロールでは、各コレクションの間にセパレーターを追加する必要があることがよくあります。 item.間に区切りスタイルを挿入しますが、WPF の ItemsControl には関連する機能が直接実装されていないため、国を救うには曲線しか考えられません。調べた結果、おそらく次の 2 つの実装方法が考えられました。
まず、次のように ItemsControl のデータ テンプレートを作成します。
<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue" VerticalAlignment="Stretch"> <ItemsControl.ItemTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Border Name="Bd" Grid.Row="0" Height="1" Background="Red" /> <TextBlock Grid.Row="1" Text="{Binding}" /> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
この時点で、Bd という名前の境界線が各項目のヘッダーに表示されることが目標です。これは、最初の項目の区切り文字を非表示にすることで、項目間に区切り文字を設けるという目的を達成します。
最初の実装方法は、コレクション アイテムを使用して PreviousData を前方バインドします。これは、おそらく最も使用されていない方法の 1 つですが、現時点では便利です。コードは次のとおりです。
<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}"> <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" /> </DataTrigger> </DataTemplate.Triggers>
項目の前の項目が空の場合、区切り文字は 1 行のコードで非表示になります。ただし、この実装の欠点の 1 つは、Insert メソッドを使用してバインドされたデータ ソースの先頭にデータを追加する場合、キューの最後またはキューにデータを追加すると、区切り文字のない複数の項目が表示されることです。キューの途中では、この問題は発生しません。
2 番目の 実装方法は、ItemsControl の AlternationCount 属性と AlternationIndex 属性を使用してコレクション項目のインデックス番号をマークし、インデックス付き項目の区切り文字を非表示にすることです。番号 0、コード 次のとおりです:
コードをコピーします コードは次のとおりです:
057a34b670ca6d2cc3c790a775a9025b
まずItemsControlのデータソースのCountプロパティにAlternationCountをバインドします。そしてこのとき、ItemsControlのAlternationIndexプロパティがコレクションデータソースのインデックス番号になります。トリガーにロジックを書きます。
<Border Name="Bd" Grid.Row="0" Height="1" Background="Red"> <Border.Style> <Style TargetType="{x:Type Border}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}" Value="0"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border>
このメソッドは、インデックス番号が 0 の場合に非表示になることを決定します。利点は、チームの先頭に挿入する場合でも、キューに挿入する場合でも、この機能を確実に実現できることですが、AlternationCount 属性と AlternationIndex 属性の本来の意味は、次のような関数を実装することです。交互の色の変更 現時点では、この関数が占有されているため、コレクションでセパレーターと代替線のスタイルの両方を実装したい場合は、この関数には追加のコンバーターが必要になる場合がありますが、コンバーターの内容も非常に単純です。剰余を求めることで関数を実行します。
以上がWPF コレクション コントロールはセパレーター (ItemsControl Separator) を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。