2

我想从打开的 WPF 组合框中隐藏选定的项目,基本上是为了显示而不是这个:

item2
 item1
 item2
 item3

这:

item2
 item1
 item3

如何才能做到这一点?

4

3 回答 3

2

为什么不更改所选项目的可见性呢?

于 2009-02-06T11:32:49.663 回答
1

由于组合框的项目视图是从它包含的项目集合中自动生成的,因此
您需要做的是从组合框的项目中删除选定的项目并设置 IsEditable="True" 以便选择有效。
您可以在包含选择的组合框上方放置一个标签,以防止用户在组合框中键入。

另一种解决方案是使用 2 个组合框,一个包含所有项目,一个包含所有项目,但在第一个组合框中选择的项目。
然后阻止第一个组合框展开并将其放在第二个组合框上方。

于 2009-02-07T16:36:03.950 回答
0

为此找到了一个技巧,在组合框顶部放置了一个标签:

Window1.xaml:

<Window x:Class="WpfApplication2.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ComboBox Height="23" Margin="53,42,105,0" Name="comboBox1" VerticalAlignment="Top"
                  SelectionChanged="comboBox1_SelectionChanged" DropDownOpened="comboBox1_DropDownOpened"
                  DropDownClosed="comboBox1_DropDownClosed" GotFocus="comboBox1_GotFocus"
                  LostFocus="comboBox1_LostFocus"/>
        <Label Height="23" Margin="53,42,105,0" Name="label1" VerticalAlignment="Top" IsHitTestVisible="False">
            almafa
        </Label>
        <Button Height="23" Margin="89,0,114,108" Name="button1" VerticalAlignment="Bottom">Button</Button>
    </Grid>
</Window>

Window1.xaml.cs:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace WpfApplication2
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            comboBox1.Items.Add("alma");
            comboBox1.Items.Add("korte");
            comboBox1.Items.Add("szilva");
        }

        private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (comboBox1.SelectedItem != null)
                comboBox1.SelectedItem = null;
        }

        private void comboBox1_DropDownOpened(object sender, EventArgs e)
        {
            label1.Foreground = Brushes.Black;
        }

        private void comboBox1_DropDownClosed(object sender, EventArgs e)
        {
            label1.Foreground = Brushes.White;
        }

        private void comboBox1_GotFocus(object sender, RoutedEventArgs e)
        {
            if (!comboBox1.IsDropDownOpen)
                label1.Foreground = Brushes.White;
        }

        private void comboBox1_LostFocus(object sender, RoutedEventArgs e)
        {
            label1.Foreground = Brushes.Black;
        }
    }
}
于 2009-02-05T19:39:16.717 回答