2

開いたWPFコンボボックスから選択したアイテムを非表示にしたいのですが、基本的には次の代わりに表示します。

item2
 item1
 item2
 item3

これ:

item2
 item1
 item3

これはどのように行うことができますか?

4

3 に答える 3

1

コンボボックスの項目のビューは含まれる項目のコレクションから自動的に生成されるため、
コンボボックスの項目から選択した項目を削除し、選択が有効になるように IsEditable="True" を設定する必要があります。
ユーザーがコンボボックス内に入力するのを防ぐために、選択を含むコンボボックスの上にラベルを配置できます。

もう1つの解決策は、2つのコンボボックスを使用することです.1つはすべてのアイテムを含み、もう1つは最初のコンボボックスで選択されたアイテム以外のすべてのアイテムを含みます。
次に、最初のコンボボックスが展開されないようにして、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 に答える