列表框中突出显示的项目

时间:2013-06-15 21:12:26

标签: c# wpf listbox highlight

我有一个ListBox,其中放入了数据。简单的字符串,没有极端。但是,用户选择数据将是什么,他可以和两个不同的(!!!)对象,它们具有相同的名称。

示例:用于连接图片。每张照片都有一个名字。用户选择图片并将其添加到列表框中。但是,如果他选择两张具有相同名称的图片,则选择列表框中的项目会发生这种情况:

image

我该怎么做才能避免这种情况?我只想要一个突出显示和选中的项目。 列表框设置在单个选择上,在选择事件上,它表示只选择了一个项目。所以它只涉及亮点。 (使用WPF,C#)

1 个答案:

答案 0 :(得分:1)

要避免这种情况,你必须在字符串周围使用包装;您的图片对象似乎是个不错的开始。

以下是一个说明两种方法的示例:

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:local="clr-namespace:WpfApplication1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListBox x:Name="list1" ItemsSource="{Binding Pictures1}" />
        <ListBox x:Name="list2" ItemsSource="{Binding Pictures2}" Grid.Column="1" DisplayMemberPath="Name" />
        <TextBox Text="{Binding Text}" Grid.Row="1"/>
        <Button Content="+" Grid.Row="1" Grid.Column="1" Click="Button_Click"/>
    </Grid>
</Window>

代码背后:

using System.Windows;
using System.Windows.Media;
using System.Windows.Input;
using System.Windows.Controls;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public class Picture
        {
            public string Name { get; set; }
        }

        public string Text { get; set; }
        public ObservableCollection<string> Pictures1 { get; set; }
        public ObservableCollection<Picture> Pictures2 { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            Pictures1 = new ObservableCollection<string>();
            Pictures2 = new ObservableCollection<Picture>();

            DataContext = this;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Pictures1.Add(Text);
            Pictures2.Add(new Picture { Name = Text });

            list1.SelectedItem = Pictures1[0];
            list2.SelectedItem = Pictures2[0];
        }
    }
}

您还可以绑定更多信息,例如扩展名,大小或可以帮助用户的任何属性。

希望这会有所帮助......