開いたWPFコンボボックスから選択したアイテムを非表示にしたいのですが、基本的には次の代わりに表示します。
item2
item1
item2
item3
これ:
item2
item1
item3
これはどのように行うことができますか?
開いたWPFコンボボックスから選択したアイテムを非表示にしたいのですが、基本的には次の代わりに表示します。
item2
item1
item2
item3
これ:
item2
item1
item3
これはどのように行うことができますか?
コンボボックスの項目のビューは含まれる項目のコレクションから自動的に生成されるため、
コンボボックスの項目から選択した項目を削除し、選択が有効になるように IsEditable="True" を設定する必要があります。
ユーザーがコンボボックス内に入力するのを防ぐために、選択を含むコンボボックスの上にラベルを配置できます。
もう1つの解決策は、2つのコンボボックスを使用することです.1つはすべてのアイテムを含み、もう1つは最初のコンボボックスで選択されたアイテム以外のすべてのアイテムを含みます。
次に、最初のコンボボックスが展開されないようにして、2 番目のコンボボックスの上に配置します。
コンボボックスの上にラベルを付けて、このためのハックを見つけました:
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;
}
}
}