У меня есть 3 комбобокса, как показано ниже, в разных местах с 3 изображениями под каждым комбобоксом.


        

        
        

        
        

и код .cs

 private void Category1_Loaded(object sender, RoutedEventArgs e)
        {
            // ... A List.
            List data = new List();
            data.Add("Category1_1");
            data.Add("Category1_2");
            // ... Get the ComboBox reference.
            var comboBox = sender as ComboBox;
            // ... Assign the ItemsSource to the List.
            comboBox.ItemsSource = data;
            // ... Make the first item selected.
            comboBox.SelectedIndex = 0;
        }

private void Category2_Loaded(object sender, RoutedEventArgs e)
        {
            // ... A List.
            List data = new List();
            data.Add("Category2_1");
            data.Add("Category2_2");
            // ... Get the ComboBox reference.
            var comboBox = sender as ComboBox;
            // ... Assign the ItemsSource to the List.
            comboBox.ItemsSource = data;
            // ... Make the first item selected.
            comboBox.SelectedIndex = 0;
        }
private void Category3_Loaded(object sender, RoutedEventArgs e)
        {
            // ... A List.
            List data = new List();
            data.Add("Category3_1");
            data.Add("Category3_2");
            // ... Get the ComboBox reference.
            var comboBox = sender as ComboBox;
            // ... Assign the ItemsSource to the List.
            comboBox.ItemsSource = data;
            // ... Make the first item selected.
            comboBox.SelectedIndex = 0;
        }

Сейчас 3 комбобокса и изображения, как показано ниже введите описание изображения здесь

Я хочу изменить или отобразить определенное изображение на основе выпадающего списка. Например, если я выбираю значение выпадающего списка Category1_1, он должен показать мне изображение c:\users\Category1_1.PNG

. он должен показать мне изображение c:\users\Category1_1.PNG

Neo

Ответов: 2

Ответы (2)

Вы можете привязать свойство Source изображения непосредственно к SelectedItem соответствующего ComboBox с помощью конвертера привязки, который преобразует строку категории в BitmapImage:


    

...


Конвертер будет выглядеть следующим образом:

public class ImageConverter : IValueConverter
{
    public object Convert(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            var path = string.Format(@"C:\Users\{0}.png", value);
            return new BitmapImage(new Uri(path));
        }
        catch (Exception ex)
        {
            return null; // or some default image
        }
    }

    public object ConvertBack(
        object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

В качестве примечания, вы можете легко создать список элементов ComboBox в XAML следующим образом:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
...

    
        Category1_1
        Category1_2
        Category1_3
    

Я не могу проверить это сейчас, но, взяв несколько примеров из MSDN, ваше событие selected changed для combobox Category1 должно быть примерно таким

    private void Category1_SelectionChanged(object sender, RoutedEventArgs e)
    {
        var comboBox = sender as ComboBox;

        // Check if you have something selected (this happens sometime)
        if(comboBox.SelectedIndex != -1)
        {
            // Take the text of the combo and build the path to the file
            string fileName = Path.Combine(@"C:\users", comboBox.Text + ".png"); 

            // Again, check if we really have that file available
            if(File.Exists(fileName))
            {
                // Build a BitmapImage from the file
                BitmapImage bi = new BitmapImage();
                bi.BeginInit();
                bi.UriSource = new Uri(fileName, UriKind.Relative);
                bi.EndInit();

                // Set the Image for this combo. Not sure if the Stretch part is needed
                CB1.Stretch = Stretch.Fill;
                CB1.Source = bi3;
            } 
        }
    }

Ссылка из MSDN:

Свойство Image.Source
СвойствоComboBox.Text

Также я не уверен, что чтение свойства Text работает так, как ожидалось (Возможные проблемы вызваны свойством ComboBox IsEditable). В любом случае, вы можете использовать SelectedItem.ToString()

Если вы сделаете так, чтобы это работало для комбо Category1, то это можно легко переделать в общий метод для всех трех комбо, передавая комбо, вызывающее событие, и изображение для обновления

2022 WebDevInsider