У меня есть ComboBox в WPF, который привязан к данным и имеет шаблон данных, который управляет отображением каждого из элементов. Я сделал так, чтобы каждый элемент отображался с двумя битами текста (для свойств Name и Path) и одним изображением (для свойства Icon).
В тот момент, когда я выбираю элемент из ComboBox, бит текстового поля ComboBox просто меняется на «TestWPF.Result», который является именем класса, которым я заполнил ComboBox.
Меня интересует одна (или обе) две вещи:
Как мне изменить его, чтобы оно отображало значение одного из полей (например, чтобы оно отображало значение поля Имя, а не имя класса)?
Можно ли заставить его использовать тот же DataTemplate, что и в списке элементов, чтобы после выбора элемента он отображался в закрытом ComboBox так же, как он выглядит в списке элементов. По сути, у меня есть DataTemplate с именем ShowResults и ComboBox, который использует этот шаблон. Я также добавил в отдельный ContentControl, который должен показать детали выбранного элемента в ComboBox, но я хочу получить его, чтобы заменить текстовое поле в ComboBox.
Обновление:
Спасибо за первый ответ. Я попытался использовать отдельный ContentControl, как вы описали, и он работает нормально. Теперь вопрос заключается в том, как заменить часть текстового поля ComboBox на этот ContentControl. Любые намеки на это будут приветствоваться.
Кроме того, можно ли заменить бит текстового поля элемента управления ComboBox смесью ContentControl и текстового поля, чтобы я все еще мог вводить текстовое поле, чтобы помочь выбрать элементы из ComboBox, но затем, когда я закрываю выпадающий остаток бит ContentControl будет заполнен остальным текстом и значком. Надеюсь, что это имеет смысл - задавайте вопросы, если это не так!
Код:
Меня попросили опубликовать мой код - вот оно. Я пытался удалить вещи, которые, как я знаю, определенно не имеют отношения к делу, но я точно не знаю, что относится к делу, поэтому, если сомневаюсь, я оставил их в теме.
<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>