Я уверен, что кто-то будет перепрыгивать через все это, поскольку ему отвечают где-то в другом месте, но я утверждаю, что перешел по каждой соответствующей ссылке на этом сайте (и в других местах) и перепробовал все возможные комбинации ItemTemplate, ComboBoxItem, ItemContainerStyle, DisplayMemberPath, SelectedItem , SelectedValuePath и SelectedValue, и на всю жизнь я не могу заставить это работать так, как нужно.
Я просто хочу определить список объекта ContentControl (используя x: Array) в ресурсах XAML, используемых в качестве ItemsSource для ComboBox. Этот список содержит 2 элемента, свойство Content которых установлено на элемент управления Grid, также определенный в ресурсах. Каждый элемент также имеет свойство Tag, установленное в строку, которая функционирует как имя или описание содержимого.
Очень просто: я хочу, чтобы строка в свойстве Tag отображалась в выбранной части элемента ComboBox и в виде списка выбираемых элементов в раскрывающейся части ComboBox.
Если я установлю DisplayMemberPath = "Tag", то раскрывающаяся часть работает как нужно, но ничего не отображается в выбранной части элемента ComboBox. Я уверен, что правильное использование SelectedValuePath и SelectedValue является ключом, но я просто не могу заставить его работать.
<UserControl.Resources>
<Grid x:Key="Fluidics" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="134"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Label Content="Cartridge:"
VerticalAlignment="Center" HorizontalAlignment="Left"
Margin="0,5,0,0" Height="26" Width="62"/>
<ComboBox Grid.Column="1"
ItemsSource="{Binding Cartridges}"
SelectedIndex="{Binding SelectedCartridgeIndex, FallbackValue=0}"
SelectedItem="{Binding SelectedCartridge}"
Margin="0,5,0,0" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Config.FriendlyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<views:FluidicsExperimentParamsView Grid.Row="1" Grid.ColumnSpan="2" DataContext="{Binding FluidicsExperimentParams}" Margin="0,10,0,0"/>
</Grid>
<Grid x:Key="Data acquisition" >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="157"/>
<ColumnDefinition Width="Auto" MinWidth="87"/>
</Grid.ColumnDefinitions>
<Label Content="Camera line:" />
<ComboBox
Grid.Column="1"
IsReadOnly="True"
ItemsSource="{Binding ImageDataAcquisitionParams}"
SelectedIndex="{Binding SelectedCameraLine}"
SelectedItem="{Binding SelectedImageDataAcquisitionParams}"/>
<data:ImageDataAcquisitionView
Grid.Row="1"
Grid.ColumnSpan="2"
DataContext="{Binding ImageDataAcquisition}" Margin="0,10,0,0"/>
</Grid>
<x:Array x:Key="ControlActivities" Type="ContentControl">
<ContentControl Content="{Binding Source={StaticResource Fluidics}}" Tag="Fluidics" />
<ContentControl Content="{Binding Source={StaticResource Data acquisition}}" Tag="Data acquisition"/>
</x:Array>
</UserControl.Resources>
...
<ComboBox Name="ControlActivityComboBox"
MinWidth="150"
ItemsSource="{Binding Source={StaticResource ControlActivities}}"
SelectedItem="{Binding SelectedActivity}"
SelectedValuePath="Tag"
SelectedValue="{Binding SelectedActivity.Tag}"
DisplayMemberPath="Tag"
HorizontalAlignment="Left"
SelectedIndex="0">
</ComboBox>