如何在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();,但这是不可能的,因为是一个控制。那么我该怎么做呢?

如何在wpf DataGrid c#中插入文本附近的图像

如果不想添加新列,则必须将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();
    }
}