2013-10-10 3 views
0

J'ai un combobox dans une application wpf C#.wpf combobox comportement par défaut

Ce que je suis en train de faire est le suivant.

J'ai un combobox désélectionné, comme vous regardez je peux voir une flèche vers la droite et un espace pour le texte à gauche. Pour les besoins de cette question, je me référerai à ce texte en tant que 'Cell Text'.

Lorsque vous sélectionnez le bouton, il apparaît avec une liste. Je veux que cette liste contienne un certain nombre de robots auxquels mon GUI/PC peut se connecter. Quand je sélectionne un robot, un message est envoyé à ce robot essayant de se connecter avec lui.

Le « texte Cell » je veux afficher le nom du robot actuellement connecté. Il y aura des situations où une connexion à un robot sélectionné ne sera pas possible, aussi une connexion réussie pourrait prendre 5 secondes.

ce que je dois faire est d'arrêter la sélection apparaît automatiquement dans le « Texte de la cellule », est-ce possible?

Merci

<ComboBox ItemsSource="{Binding MyRobotOptions}" Grid.Column="1" SelectedItem="{Binding SelectedRobot}" Margin="5"/> 
+0

Que voulez-vous dire par "apparaître automatiquement"? Voulez-vous dire que vous voulez avoir le concept d'une sélection nulle ou vide? par exemple. Voulez-vous qu'il soit vide intially sans un robot sélectionné? –

+0

Lorsque je sélectionne un robot, je ne veux pas que la sélection apparaisse immédiatement, je veux seulement qu'elle se mette à jour lorsqu'une variable "ConnectedRobot" est mise à jour. Pas quand je fais une sélection. – user2336727

+0

Qu'en est-il de l'ajout d'un 'Timer' ou quelque chose de similaire dans l'événement [SelectionChanged] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectionchanged.aspx)? – Tico

Répondre

0

Pour un utilisateur inexpérimenté (pas d'infraction), l'une des façons les plus simples que vous pouvez faire est de superposer un TextBlock sur le « Texte de cellule », comme vous l'appelez:

<Grid> 
    <ComboBox ItemsSource="{Binding MyRobotOptions}" Grid.Column="1" SelectedItem="{ 
     Binding SelectedRobot}" Margin="5" /> 
    <TextBlock Text="{Binding YourSelectedRobotName}" Background="White" 
     Margin="0,0,24,0" /> 
</Grid> 

Je n'ai pas pu tester cela, alors vous pourriez avoir besoin d'ajuster les valeurs de propriété Margin pour l'adapter mieux, mais il devrait cacher la valeur du texte d'origine.

0

Une meilleure solution que je pense est d'utiliser un indicateur distinct pour l'état de connexion. Par exemple, une bordure colorée autour de la Combobox devient verte lorsqu'elle est connectée, rouge lorsqu'elle est déconnectée. De cette façon, vous n'avez pas à casser le paradigme d'un ComboBox que tout le monde suppose: lorsque vous sélectionnez quelque chose, il apparaît immédiatement sélectionné dans le ComboBox.