ホームページ >バックエンド開発 >C#.Net チュートリアル >WPF コレクション コントロールはセパレーター (ItemsControl Separator) を実装します。

WPF コレクション コントロールはセパレーター (ItemsControl Separator) を実装します。

Y2J
Y2Jオリジナル
2017-04-20 10:00:592525ブラウズ

この記事では、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 番目の 実装方法は、ItemsControlAlternationCount 属性と 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。