J'ai une zone de liste déroulante dans WPF qui est databound et possède un modèle de données qui contrôle comment chaque élément est affiché. J'ai fait en sorte que chaque élément soit affiché avec deux bits de texte (pour les propriétés Name et Path) et une image (pour la propriété Icon).Contrôler quel champ est affiché dans la zone de zone de texte d'une base de données WPF ComboBox
Au moment où je sélectionne un élément de la zone de liste déroulante, le bit de zone de texte de la zone de liste modifiable change simplement pour dire "TestWPF.Result" qui est le nom de la classe avec laquelle j'ai peuplé le ComboBox.
Je suis intéressé par un (ou les deux) de deux choses:
Comment puis-je modifier afin qu'il affiche la valeur de l'un des champs là-bas (par exemple, il montre la valeur. du champ Nom plutôt que le nom de la classe)? Il est possible d'utiliser le même DataTemplate que dans la liste des éléments, de sorte que, une fois que j'ai sélectionné un élément, il s'affiche dans la zone de liste déroulante fermée de la même manière que dans la liste des éléments. Fondamentalement, j'ai un DataTemplate appelé ShowResults et un ComboBox qui utilise ce modèle. J'ai également ajouté dans un ContentControl séparé que je dois montrer les détails de l'élément sélectionné dans le ComboBox, mais je veux obtenir cela pour remplacer la zone de texte dans le ComboBox.
Mise à jour:
Merci pour la première réponse. J'ai essayé d'utiliser un ContentControl séparé, comme vous l'avez décrit, et cela fonctionne très bien. La question est maintenant de savoir comment remplacer la partie textbox du ComboBox par ContentControl. Tous les conseils à ce sujet seraient les bienvenus.
De même, est-il possible de remplacer le bit de zone de texte du contrôle ComboBox par ContentControl et une zone de texte, de sorte que je puisse toujours taper dans la zone de texte pour sélectionner des éléments dans ComboBox la liste déroulante le reste du bit ContentControl sera rempli avec le reste du texte et l'icône. J'espère que cela a du sens - posez des questions si ce n'est pas le cas!
code:
m'a demandé de poster mon code - si elle est ici. Je l'ai essayé d'enlever les choses que je connais ne sont certainement pas pertinentes, mais je ne sais pas exactement ce qui est pertinent si dans le doute, je l'ai laissé les choses.
<Window x:Class="TestWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:TestWPF"
Title="Window1" Height="300" Width="843" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="ShowResult" DataType="TestWPF.Result">
<StackPanel Margin="5" Orientation="Horizontal">
<Image Width="32" Height="32" Source="{Binding Path=Image}"/>
<StackPanel Margin="5">
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}"/>
<TextBlock Text="{Binding Path=Path}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid Width="786">
<Button Height="23" HorizontalAlignment="Right" Margin="0,24,166,0" Name="btnTest" VerticalAlignment="Top" Width="75" Click="btnTest_Click">Add</Button>
<ComboBox StaysOpenOnEdit="True" DropDownClosed="comboBox1_DropDownClosed" PreviewTextInput="comboBox1_PreviewTextInput" SelectionChanged="comboBox1_SelectionChanged" ItemTemplate="{StaticResource ShowResult}" Margin="259,109,22,89" Name="comboBox1" IsEditable="True" />
<ContentControl Height="50" Margin="268,0,22,21" Name="contentControl1" VerticalAlignment="Bottom" Content="{Binding ElementName=comboBox1,Path=SelectedValue}" ContentTemplate="{StaticResource ShowResult}"/>
</Grid>
Merci pour la réponse. Comment vais-je placer le ContentControl à la place du TextBox? Avez-vous un exemple de code plus grand pour que je puisse voir comment faire cela? – robintw
Je pense qu'il est préférable de poster votre code afin que je puisse le modifier et vous montrer. –
Voilà, je l'ai posté maintenant. Merci pour l'aide continue :-) – robintw