0

如何使用 c# .net for wpf application 在组合框中的项目之间切换。一旦我专注于组合框,我就可以在项目之间切换,而不是关注我想在项目之间切换的组合框。

4

1 回答 1

0

所以也许这就是你想要的,我也不知道你想要什么。这可以帮助你。如果您专注于组合框,则可以通过向上键或向下键在两个项目之间切换。

 public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        comboBox1.Items.Add("1");
        comboBox1.Items.Add("2");
        comboBox1.SelectedIndex = 0;
        comboBox1.Focus();
    }

    private void comboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Up)
        {
            if (comboBox1.SelectedIndex != 0)
                comboBox1.SelectedIndex--;
        }
        if (e.Key == Key.Down)
        {
            if (comboBox1.SelectedIndex != comboBox1.Items.Count-1)
                comboBox1.SelectedIndex++;
        }

    }
}

好的,那么让我们这样做。如果文本框文本发生更改,则调用第一个事件。如果我理解正确,你应该有类似的东西。第二个是你需要的。

   private void textBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        //deleting all items
        comboBox1.Items.Clear();
        //adding text of each textbox if not empty
        if (textBox1.Text != "")
            comboBox1.Items.Add(textBox1.Text);
        if (textBox2.Text != "")
            comboBox1.Items.Add(textBox2.Text);
        //if combobox not empty select first item
        if (comboBox1.Items.Count != 0)
            comboBox1.SelectedIndex = 0;
    }

所以我做的是。when one of the textboxes is selected and the user presses up or down then it toggles the content of the combobox. 此事件必须作为 PreviewKeyDown 事件分配给每个文本框。

        private void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        //key up or key down
        if (e.Key == Key.Up || e.Key == Key.Down)
        {
            //has 2 items
            if (comboBox1.Items.Count == 2)
            {
                if (comboBox1.SelectedIndex == 0)
                    comboBox1.SelectedIndex = 1;
                else
                    comboBox1.SelectedIndex = 0;
            }
        }
    }

这里是带有绑定事件的文本框的 xaml 代码。

    <TextBox Height="23" Margin="12,0,0,76" Name="textBox1" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="120" TextChanged="textBox_TextChanged" PreviewKeyDown="textBox_KeyDown" />
    <TextBox Height="23" HorizontalAlignment="Right" Margin="0,0,12,76" Name="textBox2" VerticalAlignment="Bottom" Width="120" TextChanged="textBox_TextChanged" PreviewKeyDown="textBox_KeyDown" />

有件事我忘了提。它仅在其中一个文本框被聚焦时才有效。如果您还有其他可以关注的项目,那么您必须为每个项目添加此事件,以确保无论现在关注哪些项目都会调用它。另一种可能性是创建一个键盘钩子。但这很复杂。

于 2012-08-29T11:38:27.843 回答