Le contrôle de collection WPF implémente le séparateur (ItemsControl Separator)

Y2J
Libérer: 2017-04-20 10:00:59
original
2511 Les gens l'ont consulté

Cet article présente principalement le contrôle de collection WPF pour implémenter le séparateur ItemsControl Separator en détail. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

est souvent nécessaire dans les contrôles de collection WPF. style de séparateur entre chaque élément de la collection, mais ItemsControl de WPF n'a pas d'implémentation directe des fonctions associées, nous ne pouvons donc considérer que les courbes pour sauver le pays. Après recherche, j'ai probablement pensé aux deux méthodes d'implémentation suivantes.

Écrivez d'abord le modèle de données de ItemsControl comme suit :


<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>
Copier après la connexion

où le nom est Bd La bordure est le séparateur. À ce stade, le séparateur est visible dans l'en-tête de chaque élément. Notre objectif est désormais de masquer le séparateur du premier élément. Cela permet d'avoir des séparateurs entre les éléments.

La première méthode d'implémentation est la plus simple, utilisant des éléments de collection pour lier en avant les données précédentes. C'est l'une des quatre méthodes de liaison, et c'est probablement celle qui est la moins couramment utilisée. , mais c'est pratique en ce moment, le code est le suivant :


<DataTemplate.Triggers>
 <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}"
     Value="{x:Null}">
  <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" />
 </DataTrigger>
</DataTemplate.Triggers>
Copier après la connexion

Masquer le séparateur lorsque la rubrique précédente d'un élément est vide, une simple ligne de code Terminé. Cependant, l'un des inconvénients de cette méthode d'implémentation est que si vous utilisez la méthode Insert pour ajouter des données au début de la source de données liée, plusieurs éléments sans séparateur apparaîtront si vous ajoutez des données à la fin de la file d'attente ou à. au milieu de la file d'attente, il n'y aura pas de Ce problème se produit.

La deuxième implémentation se fait à l'aide de ItemsControl de AlternationCount et L'attribut AlternationIndex marque le numéro d'index de l'élément de collection, puis masque le séparateur de l'élément de numéro d'index 0. Le code est le suivant :

Copier le code Le code est le suivant :

VerticalAlignment="Stretch" AlternationCount=" {Binding Source.Count}">

Liez d'abord AlternationCount à la propriété Count de la source de données sur ItemsControl, puis la propriété AlternationIndex de ItemsControl devient la propriété numéro d'index de la source de données de collection, écrivez simplement la logique dans le déclencheur :


<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>
Copier après la connexion

Le déclencheur détermine que lorsque le numéro d'index est 0, il sera masqué. Border , la quantité de code dans cette méthode n'est pas grande, et l'avantage est qu'elle peut certainement réaliser cette fonction, que ce soit en insérant au début ou à la fin de la file d'attente, mais AlternationCount et AlternationIndex est d'implémenter des fonctions telles que changer la couleur des lignes alternatives à ce stade, cette fonction est occupée, donc si votre collection souhaite implémenter à la fois des styles de séparateur et des styles de ligne alternatifs, vous devrez peut-être ajouter des attributs supplémentaires, mais le contenu du convertisseur est également très simple. Vous pouvez restaurer la fonction précédente en trouvant le reste. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
wpf
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!