如何从选定的ListBox Control的listboxitem中获取属性? C#

时间:2018-01-30 18:57:08

标签: c# wpf xaml listbox listboxitem

就像标题所说我希望通过点击按钮从选定的listboxitem中获取属性的值

 <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代码的新手,我会尝试更好地解释我想要的结果。

以下是我将尝试解释的图片:Image

所以我想要的是当选择1时我需要它来点击保存按钮时返回蓝色火焰图像的来源

当选择2时,我需要它在我点击保存按钮时返回蓝色facebook图像的来源

2 个答案:

答案 0 :(得分:0)

IconListbox.SelectedItem,然后将其强制转换或创建它们的新对象。

实施例

Image i = (Image)IconListbox.SelectedItem;

答案 1 :(得分:0)

您可以在SelectedItem中找到Image,如下面的代码

        var selectedItem = IconListbox.SelectedItem as ListBoxItem;
        if (selectedItem != null)
        {
            var image = selectedItem.GetChildOfType<Image>();
            if (image != null)
            {
                var source = image.Source;
            }
        }

&#13;

获取特定类型的孩子的扩展方法

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