Как скрыть выбранный элемент в поле со списком WPF? - PullRequest
2 голосов
/ 05 февраля 2009

Я хочу скрыть выбранный элемент из открытого поля со списком WPF, в основном, чтобы показать вместо этого:

item2
 item1
 item2
 item3

это:

item2
 item1
 item3

Как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2009

Почему бы вам не изменить видимость выбранного элемента?

1 голос
/ 07 февраля 2009

Поскольку представление элемента в выпадающем списке автоматически генерируется из коллекции элементов, которые в нем содержатся,
то, что вам нужно сделать, это либо удалить выбранный элемент из элементов списка, и установить IsEditable = "True", чтобы выбор был действительным.
Над списком можно поместить ярлык, который содержит выделение, чтобы пользователь не мог вводить текст внутри поля.

Другим решением было бы использовать 2 комбинированных списка, один со всеми элементами и один со всеми элементами, кроме элемента, выбранного в первом комбинированном списке.
Затем предотвратите расширение первого комбинированного списка и поместите его над вторым комбинированным списком.

1 голос
/ 05 февраля 2009

Нашел взлом для этого, поместив ярлык поверх поля со списком:

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;
        }
    }
}
...