Как получить свойство из элемента списка выбранного элемента управления ListBox? C#
Как заголовок сказал, что я хочу получить значение свойства из выбранного элемента списка по нажатию кнопки
<ListBox x:Name="IconListbox" Background="{x:Null}" BorderBrush="Black">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBoxItem x:Name="defaultIcon">
<Grid Background="Black">
<Border BorderBrush="#FF1EF3F3" BorderThickness="2">
<Image x:Name="defaultIconImage" Width="50" Height="50" Source="icon.png"/>
</Border>
</Grid>
</ListBoxItem>
<ListBoxItem>
<Grid Background="Black">
<Border BorderBrush="#FF1EF3F3" BorderThickness="2">
<Image x:Name="secondIconImage" Width="50" Height="50" Source="SecondIcon.png"/>
</Border>
</Grid>
</ListBoxItem>
</ListBox>
Например, если я нажму кнопку, она должна вернуть источник изображения текущего выбранного элемента. Поэтому, если ListboxItem defaultIcon выбран, он должен вернуть defaulticon.png. Как я могу это сделать?
Редактировать:
Может быть, я принимаю неправильный подход, пытаясь использовать список. Я новичок в коде Xaml, и я постараюсь лучше объяснить, что я хочу в результате.
Вот картина, которую я буду использовать, чтобы попытаться объяснить:
Так что я хочу, чтобы при выборе 1 мне нужно было вернуть источник изображения голубого пламени, когда я нажимаю кнопку сохранения
когда выбрано 2, мне нужно вернуть источник синего изображения в фейсбуке, когда я нажимаю кнопку сохранения
2 ответа
Вы можете найти изображение внутри SelectedItem как код ниже
var selectedItem = IconListbox.SelectedItem as ListBoxItem;
if (selectedItem != null)
{
var image = selectedItem.GetChildOfType<Image>();
if (image != null)
{
var source = image.Source;
}
}
метод расширения для получения дочернего элемента определенного типа
public static T GetChildOfType<T>(this DependencyObject depObj) where T : DependencyObject
{
if (depObj == null) return null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
var child = VisualTreeHelper.GetChild(depObj, i);
var result = (child as T) ?? GetChildOfType<T>(child);
if (result != null) return result;
}
return null;
}
IconListbox.SelectedItem и затем приведите его или создайте новый объект из них.
пример
Image i = (Image)IconListbox.SelectedItem;