WPF组合框 - 按标签选择项目

Edd*_*die 7 c# wpf xaml combobox

我有一个像这样的组合框

    <ComboBox Name="myMenu">
        <ComboBoxItem Content="Question 1" Tag="1"  />
        <ComboBoxItem Content="Question 2" Tag="2"  />
        <ComboBoxItem Content="Question 3" Tag="3"  />
        <ComboBoxItem Content="Question 4" Tag="4"  />
    </ComboBox>
Run Code Online (Sandbox Code Playgroud)

如何通过标记值以编程方式设置所选索引?例如'myMenu.selectedTag = 3'和问题3将是所选项目?

我想要的东西比现在的解决方案更容易......

      int tagToSelect = 3;
      foreach (ComboBoxItem item in myMenu.Items)
      {
          if(item.Tag.Equals(tagToSelect)
          {
               myMenu.SelectedItem = item;
          }
      }
Run Code Online (Sandbox Code Playgroud)

Ser*_* B. 3

看起来您正在寻找 ComboBox 控件的属性 SelectedValuePath 。请参阅此处的示例http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvaluepath.aspx

对于那些在上面的链接下找不到示例并继续投票的人,我准备了自己的示例。它重点介绍了如何设置组合框并通过分配选定的值来选择适当的项目。

主窗口.xaml

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" Height="97" Width="202">
<Window.Resources>
    <XmlDataProvider x:Key="Questions" XPath="/Questions/*">
        <x:XData>
            <Questions xmlns="">
                <Question Title="Question 1" Index="1" />
                <Question Title="Question 2" Index="2" />
                <Question Title="Question 3" Index="3" />
                <Question Title="Question 4" Index="4" />
            </Questions>
        </x:XData>
    </XmlDataProvider>
    <DataTemplate x:Key="QuestionItemTemplate">
        <TextBlock Text="{Binding XPath=@Title}" />
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ComboBox Name="myMenu"
              ItemsSource="{Binding Source={StaticResource Questions}}"
              ItemTemplate="{StaticResource QuestionItemTemplate}"
              SelectedValuePath="@Index"/>
    <TextBlock Text="{Binding ElementName=myMenu, 
        Path=SelectedValue, StringFormat=Selected Index: {0:D}}"/>
    <Button Content="Select another item" Click="Button_Click" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            myMenu.SelectedValue = ++_counter;
            if (_counter > 3) _counter = 0;
        }

        private int _counter = 0;

    }
}
Run Code Online (Sandbox Code Playgroud)