Ce que je dois accomplir est une combinaison qui montre aux gens. Lorsque vous développez la liste déroulante, il affiche le prénom et le nom de famille, mais lorsque vous sélectionnez une personne, la valeur indiquée sur ComboBox devrait être juste le prénom de la personne.
J'ai l'élément de mesure suivant: P>
<ComboBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding FirstName}" /> <TextBlock Text=" " /> <TextBlock Text="{Binding LastName}" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate>
5 Réponses :
Je l'ai eu. Je dois juste ajouter ce qui suit à mon comboBox:
IsEditable="True" IsReadOnly="True" TextSearch.TextPath="FirstName"
Cela résout ma question initiale mais je l'ai changé un peu. Comment puis-je afficher uniquement l'image par opposition au prénom quand un élément est sélectionné?
Merci d'avoir besoin d'une solution simple pour cela.
Aimez-le, exactement ce que je cherchais!
Mettez une gâchette sur le type de données. La gâchette doit vérifier la propriété issuite (le dataTemplate nécessitera un ensemble cibletype pour que cela fonctionne). Si elle est sélectionnée, vous pouvez définir la visibilité de vos blocs de texte à effondrer et définir la visibilité de l'image sur Visible. Ensuite, faites le contraire pour le cas qu'il n'est pas sélectionné. P>
Merci. Cela a du sens, car dans une combinaison, un seul élément est sélectionné. Bonne idée.
Voici la solution:
<ComboBox> <ComboBox.ItemTemplate> <DataTemplate> <StackPanel> <ContentControl x:Name="content" Content="{Binding}" ContentTemplate="{StaticResource ComplexTemplate}"/> </StackPanel> <DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBoxItem}}" Value="{x:Null}"> <Setter TargetName="content" Property="ContentTemplate" Value="{StaticResource SimpleTemplate}"/> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
Merci pour cette impressionnante solution
Seul problème est qu'il provoque des erreurs de liaison WPF pour ne jamais trouver l'ancêtre.
Une autre option consiste à utiliser ItemTemplateselector code>
au lieu de Itemtemplate code>
. Je l'utilise de la manière suivante.
ComboBoxItemTemplateselector code> dérive de
DataMplateselector code> et a deux propriétés connectées,
sélectionnéTemplate code> et
Dropdowntemplate code>. Ensuite, nous définissons les dataMplates de XAML comme celui-ci P>
public static class DependencyObjectExtensions
{
public static T GetVisualParent<T>(this DependencyObject child) where T : Visual
{
while ((child != null) && !(child is T))
{
child = VisualTreeHelper.GetParent(child);
}
return child as T;
}
}
J'ai utilisé l'approche suivante et le comportement p> a travaillé comme un charme. N'aimez pas un événement à peu près chargé ici, mais vous pouvez le réparer si vous voulez p> p>
Un peu tard, mais relatif à mon avis. Une solution complète différente que celle mentionnée ci-dessous est décrite ici: social.msdn.microsoft.com/forums/en-us/wpf/thread/... . Sans code personnalisé, fonctionne bien aussi.