gpt4 book ai didi

wpf - 如何使WPF ListView 动态显示图像和标签

转载 作者:行者123 更新时间:2023-12-04 16:33:31 41 4
gpt4 key购买 nike

我很难为WPF窗口创建UI。我正在尝试(动态地)显示一堆电影海报,这些电影海报的名称直接位于图像的下方。通过foreach迭代将ItemsSource分配给图像列表。图像文件本身的大小可能不同,但是如下所示,我将设置一个统一的大小。

基本上,我的目标是使其看起来像这样:

enter image description here

到目前为止,我的代码仅显示一个窗口,该窗口具有一个大的水平行(?),图像居中,没有标签。这是我的XAML代码:

<Window x:Name="TVWindow" x:Class="PACS_Pre_Alpha.TV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TV" Height="746" Width="1000" ResizeMode="NoResize">
<Grid x:Name="TVGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<ListView x:Name="TvBox" HorizontalAlignment="Left" Height="648" VerticalAlignment="Top" Width="994" Grid.Row="5" Grid.Column="5">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch">
<Image Source="{Binding ImageData}" HorizontalAlignment="Center" VerticalAlignment="Top" />
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Bottom" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>

我的电影是使用以下C#代码添加的:
foreach (string tvf in ContentFiles)
{
string ContentTitle = System.IO.Path.GetFileNameWithoutExtension(tvf);
MovieData cnt = new MovieData();
cnt.ImageData = LoadImage(ActualImage);
cnt.Title = ContentTitle;
ContentDataList.Add(cnt);

}
TvBox.ItemsSource = ContentDataList;

编辑:我已经按照@MarkFeldman的建议更改了XAML标记,但是现在什么也没有出现。
编辑:目前看起来像这样:
enter image description here

最佳答案

您将提供有关数据本身的更多信息,即数据的格式,如何将其分配给ItemsSource等。一方面,您没有设置ItemTemplate,所以您可能首先要看一下。例如,如果您有一个包含电影数据的类,如下所示:

public class MovieData
{
private string _Title;
public string Title
{
get { return this._Title; }
set { this._Title = value; }
}

private BitmapImage _ImageData;
public BitmapImage ImageData
{
get { return this._ImageData; }
set { this._ImageData = value; }
}

}

然后,您将使用以下内容显示它:
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch">
<Image Source="{Binding ImageData}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<TextBlock Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>

更新:

抱歉,我认为很明显您仍然需要使用UniformGrid。完整的XAML如下所示:
<ListView x:Name="TvBox" HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Image Source="{Binding ImageData}" HorizontalAlignment="Stretch" VerticalAlignment="Top" Stretch="UniformToFill" />
<TextBlock Text="{Binding Title}" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

我已经为您提供了MovieData类,因此您的Window代码应如下所示:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();

this.TvBox.ItemsSource = new MovieData[]
{
new MovieData{Title="Movie 1", ImageData=LoadImage("image.jpg")},
new MovieData{Title="Movie 2", ImageData=LoadImage("image.jpg")},
new MovieData{Title="Movie 3", ImageData=LoadImage("image.jpg")},
new MovieData{Title="Movie 4", ImageData=LoadImage("image.jpg")},
new MovieData{Title="Movie 5", ImageData=LoadImage("image.jpg")},
new MovieData{Title="Movie 6", ImageData=LoadImage("image.jpg")}
};
}

// for this code image needs to be a project resource
private BitmapImage LoadImage(string filename)
{
return new BitmapImage(new Uri("pack://application:,,,/" + filename));
}
}

在此示例中,我假设您的项目中有一个名为“image.jpg”的图像,该图像已设置为构建 Action “资源”,如果图像来自其他位置,则需要相应地修改LoadImage代码。

关于wpf - 如何使WPF ListView 动态显示图像和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786002/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com