【发布时间】:2019-08-30 08:33:40
【问题描述】:
我有一个应用程序,它使用缩略图显示文档预览。 我需要的是在图像的每个缩略图附近都有一个小标题(文本)。 标题应该在图像的左侧,在顶部,如何在图片上显示。我设法在图像上添加了带有页数的文本块。 请给你的建议。图片缩略图是在后面的代码中动态生成的。这是后面的部分代码。我设法实现了我的目的,但我想找到更优雅的解决方案。
RowDefinitionCollection rd = gridPreview.RowDefinitions;
ColumnDefinitionCollection cd =gridPreview.ColumnDefinitions;
int columnAmount = Convert.ToInt32(Math.Truncate(gridPreviewWidth / GetThumbnailSizes(tiffImageList).Item2));
gridPreviewHeight = ((tiffImageList.Count / columnAmount) + 1) * GetThumbnailSizes(tiffImageList).Item1 + 100;
for (int i = 0; i < (tiffImageList.Count / columnAmount) + 1; i++)
{
rd.Add(new RowDefinition() { Height = GridLength.Auto });
for (int j = 0; j < columnAmount; j++)
{
cd.Add(new ColumnDefinition() { Width = GridLength.Auto });
}
}
foreach (var tiffImage in tiffImageList)
{
if (columnIndex == columnAmount)
{
columnIndex = 0;
rowIndex++;
}
Image imagePreviewItem = new Image();
imagePreviewItem.Margin = new Thickness(20, 20, 20, 20);
TextBlock textBlock = new TextBlock();
textBlock.Margin = new Thickness(-370,0,0,0);
textBlock.Text = $"{tiffImage.index.ToString()}"; // Header text
RenderOptions.SetBitmapScalingMode(imagePreviewItem, BitmapScalingMode.HighQuality);
imagePreviewItem.Name = $"Image{tiffImage.index.ToString()}";
imagePreviewItem.Source = tiffImage.image.Thumbnail;
StackPanel stackPanel = new StackPanel();
stackPanel.Width = imagePreviewItem.Width + 50;
stackPanel.Height = imagePreviewItem.Height + 50;
stackPanel.Children.Add(textBlock);
stackPanel.Children.Add(imagePreviewItem);
Border border = new Border();
border.BorderBrush = Brushes.LightGray;
border.BorderThickness = new Thickness(1);
Thickness margin = border.Margin;
border.Margin = new Thickness(20, 20, 20, 20); ;
border.Child = stackPanel;
Grid.SetColumn(border, columnIndex);
Grid.SetRow(border, rowIndex);
gridPreview.Children.Add(border);
}
【问题讨论】:
-
请不要在代码中构建 UI。在 WPF 中,您应该使用 XAML 以声明方式执行此操作。
-
用于显示元素的集合,例如如果是图像集合,请使用 ItemsControl(或 ListBox 之类的子类)。在用作 ItemsControl 的 ItemTemplate 的 DataTemplate 中为单个项目创建 UI。见Data Templating Overview。
-
感谢您的建议,我对 WPF 和 C# 很陌生,所以我创建了可怕的编码。我会在你的帮助下提高我的技能。
标签: c# wpf image textblock stackpanel