我有以下WPF组合框:
<ComboBox x:Name="MyComboBox"
Grid.Column="1"
SelectionChanged="MyComboBox_SelectionChanged">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBoxItem Name="cbiEmployeeManagerType">
<StackPanel Orientation="Horizontal">
<Image Source="/Resources/Manager.png" />
<TextBlock Foreground="AliceBlue"
VerticalAlignment="Center">Manager</TextBlock>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem Name="cbiEmployeeEngineerType">
<StackPanel Orientation="Horizontal">
<Image Source="/Resources/Engineer.png" />
<TextBlock Foreground="AliceBlue"
VerticalAlignment="Center">Engineer</TextBlock>
</StackPanel>
</ComboBoxItem>
</ComboBox>
第一个问题:
在MyComboBox_SelectionChanged
内,我知道如何通过MyComboBox.SelectedIndex
检测组合框中当前选择的项目,但我不知道如何获取组合框中显示和当前选中的文本。例如,如果我在组合框中选择第二项,我想获得“工程师”。我该怎么办?
第二个问题:
此外,我想在组合框winforms中执行相同操作,您可以在其中显示成员(winforms中的组合框的DisplayMember
属性),并在内部将其与成员值(ValueMember
属性相关联。您在组合框中选择项目时可以阅读的winforms组合框。例如,假设以下combox项目及其关联值。
所以“经理”和“工程师”将显示在combox中,当我选择“经理”时,我将获得其相关值,即1000A,与工程师相同。在WPF中有可能吗?如果是这样的话?我已经读过可以使用DisplayMemberPath
和SelectedValuePath
组合框属性,但我不知道该怎么做。我是否需要创建一个类并从那里填充组合然后使用绑定?任何代码都将受到高度赞赏。
答案 0 :(得分:0)
对于第一个问题,您可以通过使用这种代码行挖掘SelectionChangedEventArgs e
事件的SelectionChanged
来访问ComboBoxItem的TextBlock:
private void MyComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedItem = e.AddedItems[0] as ComboBoxItem;
var itemStackPanel = selectedItem.Contents as StackPanel;
// Get the TextBlock object from 'itemStackPanel' object
// TextBlock is with index 1 because it is defined second
// after Image inside the StackPanel in your XAML
var textBlock = itemStackPanel.Children[1] as TextBlock;
// This variable will hold 'Engineer' or 'Manager'
var selectedText = textBlock.Text;
}
或者你可以使用这条短线,它将所有上述代码组合在一行中:
(?.
是C#6功能,以便在出现问题时检查空值)
var selectedText = (((e.AddedItems[0] as ComboBoxItem)?.Content as StackPanel)?.Children[1] as TextBlock)?.Text;