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

Posted

技术标签:

【中文标题】如何从选定的 ListBox Control 的 listboxitem 中获取属性? C#【英文标题】:How do i get a property from a selected ListBox Control 's listboxitem ? C# 【发布时间】:2018-07-09 18:20:57 【问题描述】:

就像标题所说的,我想通过单击按钮从选定的列表框项中获取属性的值

 <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

So what i want is when 1 is selected i need it to return the source of the blue flame image when i click the save button

when 2 is selected i need it to return the source of the blue facebook image when i click the save button

【问题讨论】:

您好像忘记分享代码了。 我认为代码在那里?我只能向您展示 Xaml 代码,因为我不知道如何从按钮上的列表框中获取值按下按钮什么也不做^^ 【参考方案1】:

你可以像下面的代码一样在 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;
        

【讨论】:

非常感谢!很抱歉对这些东西完全陌生,但是我是否将 Extention 方法放在公共部分类主窗口下:窗口? @RubenVersavel 创建一个新的静态类,然后将 Extention 方法放入其中【参考方案2】:

IconListbox.SelectedItem 然后对其进行转换或创建它们的新对象。

例子

Image i = (Image)IconListbox.SelectedItem;

【讨论】:

我刚试过这个,它给了我以下错误: System.InvalidCastException: 'Unable to cast object of type 'System.Windows.Controls.ListBoxItem' to type 'System.Windows.Controls.Image '。'这是我在按钮中使用的代码:private void CurrentUserTabSaveButton_Click(object sender, RoutedEventArgs e) Image test = (Image)IconListbox.SelectedItem; 你需要做什么?我需要更多信息

以上是关于如何从选定的 ListBox Control 的 listboxitem 中获取属性? C#的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF CheckBox ListBox 中获取选定项目

从 DoubleClick、Web 应用程序而非 Windows 窗体上的 ListBox 获取选定值

是否可以将 listBox 选定的项目从一个 wpf 页面传递到另一个页面

wpf中如何绑定到listbox中的选定项

Python - 如何删除选定ListBox项目周围的边框?

从数据表复制到 ListBox