如何在wpf DataGrid c#中插入文本附近的图像
本文关键字:插入文本 图像 wpf DataGrid | 更新日期: 2023-09-27 18:02:56
我编写了一个填充DataGrid的代码。所有工作都很好,但现在我想在字段"name"附近添加一个图像。这个图像的链接被数据库抓取。图像是svg格式的,为此我使用资源svg2xaml。
这行代码返回图像:
DrawingImage logo = SvgReader.Load(new MemoryStream(new System.Net.WebClient().DownloadData("http://upload.wikimedia.org/wikipedia/commons/c/c5/Logo_FC_Bayern_München.svg")));
我使用以下代码填充DataGrid:
MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information
{
name = reader["name"].ToString()
}
这是我的xaml结构:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path = 'name'}" ClipboardContentBinding="{x:Null}" Header="Codice" Width="*" />
...
有人能解释我如何通过代码添加这个图像吗?
UPDATE -动态链接:
DrawingImage logo = SvgReader.Load(new MemoryStream(new System.Net.WebClient().DownloadData(reader["link"].ToString())));
阅读器包含链接。我想把这个链接发送到NameToImageConverter,就像一个参考:NameToImageConverter nm = new NameToImageConveter();
,但这是不可能的,因为是一个控制。那么我该怎么做呢?
如果不想添加新列,则必须将DataGridTextColumn替换为DataGridTemplateColumn:
<DataGridTemplateColumn Header="Codice" Width="SizeToCells" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding name}" />
<Image Source="{Binding Path=crestUrl, Converter={StaticResource NameToImageConverter}}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
请注意,您必须将转换器添加到您的窗口资源:
<local:NameToImageConverter x:Key ="NameToImageConverter" />
其中"local"是转换器的命名空间。和转换器本身:
public class NameToImageConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// here you can return DrawingImage based on value that represents name field of your structure
// just for example the piece of your code:
if (value is string && !String.IsNullOrEmpty(value as string))
{
return SvgReader.Load(new MemoryStream(new System.Net.WebClient().DownloadData(value as string)));
}
else
{
// if value is null or not of string type
return yourDefaultImage;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}