如何用文本填充WPF组合框运行时的图像

本文关键字:运行时 图像 组合 WPF 何用 文本 填充 | 更新日期: 2023-09-27 18:12:05

我正在尝试使用WPF复制WinForms应用程序。

在我的应用程序中,我有一个组合框,其中填充了电影的标题,让我搜索电影。现在我将它移植到WPF,我想使用ComboBox来显示电影的标题和海报图像。

我已经创建了ComboBox和两个对象,但是不知道如何在运行时填充ComboBox,因为Add方法不允许我同时添加两个对象。

combobox.items.add()

请帮助我了解如何在运行时用文本和图像填充组合框。

更新:这是组合框

的xaml代码
<ComboBox x:Name="busca_pelicula" HorizontalAlignment="Left" VerticalAlignment="Top" Width="334" Margin="147,93,0,0" IsEditable="True">
    <ComboBox.Effect>
        <DropShadowEffect/>
    </ComboBox.Effect>
    <TextBox HorizontalAlignment="Left" VerticalAlignment="Center" Name="PeliText"/>
    <Image HorizontalAlignment="Right" Height="50" VerticalAlignment="Center" Width="50"/>
</ComboBox>

用电影数据库中的数据填充组合框的代码是

busca_pelicula.Items.clear();

使用SQL的东西检索标题和电影海报

BitmapImage ImagenPoster = new BitmapImage();
ImagenPoster.BeginInit();
ImagenPoster.UriSource = new Uri(wMediaPath+"Peli''"+wNombrePoster);
ImagenPoster.EndInit();
busca_pelicula.Items.Add(? don't know what to put here)

如何用文本填充WPF组合框运行时的图像

首先你必须创建一个类似于这样的类:

public class Movie : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string Name { get; set; }
    public ImageSource Picture { get; set; }
}

然后在你的xaml你必须改变组合如下:

    <ComboBox >
        <ComboBox.ItemTemplate>
            <ItemContainerTemplate>
                <StackPanel>
                    <Image Source="{Binding Picture}"></Image>
                    <TextBlock ><Run Text="{Binding Name}"/></TextBlock>
                </StackPanel>
            </ItemContainerTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

这是使用大量数据声明WPF组合框的方法,以让您"虚拟化"渲染

<ComboBox x:Name="busca_pelicula" HorizontalAlignment="Left" VerticalAlignment="Top" Width="334" Margin="147,93,0,0" IsEditable="True" Height="55" SelectionChanged="busca_pelicula_SelectionChanged" >
        <ComboBox.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ComboBox.ItemsPanel>
        <ComboBox.Effect>
            <DropShadowEffect/>
        </ComboBox.Effect>
        <ComboBox.ItemTemplate>
            <ItemContainerTemplate>
                <StackPanel>
                    <TextBlock ><Run Text="{Binding Name}" /></TextBlock>
                    <Image Source="{Binding Picture}" Width="50" Height="50" HorizontalAlignment="Right"></Image>
                </StackPanel>
            </ItemContainerTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

现在工作得很好,组合框只呈现它显示的10个项目,希望对某些人有所帮助。