我想隐藏打开的WPF组合框中的所选项目,基本上是显示而不是:
item2
item1
item2
item3
这样:
item2
item1
item3
如何做到这一点?
答案 0 :(得分:2)
为什么不改变所选项目的可见性呢?
答案 1 :(得分:1)
找到了一个黑客,在组合框的顶部放置一个标签:
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;
}
}
}
答案 2 :(得分:1)
由于组合框的项目视图是从它包含的项目集合中自动生成的,因此
您需要做的是从组合框的项目中删除所选项目并设置IsEditable =“True”以使选择有效。
您可以在组合框上方放置一个标签,其中包含选项,以防止用户在组合框中输入内容
另一个解决方案是使用2个组合框,一个包含所有项目,一个包含所有项目,但在第一个组合框中选择的项目。
然后防止第一个组合框扩展并将其放在第二个组合框上方。