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

时间:2015-07-15 15:48:42

标签: c# wpf svg datagrid

我制作了一个填充DataGrid的代码。一切正常,但现在我想在字段附近添加“名称”图像。该图像的链接由数据库抓取。图像采用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="*" />
...

有人可以解释一下如何通过代码添加此图像吗?

更新 - 动态链接:

 DrawingImage logo = SvgReader.Load(new MemoryStream(new System.Net.WebClient().DownloadData(reader["link"].ToString())));

阅读器包含链接。我想将此链接发送到NameToImageConverter,就像引用:NameToImageConverter nm = new NameToImageConveter();但这是不可能的,因为它是一个控件。那我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

如果不想添加新列,则必须将DataGridTextColumn替换为DataGridTemplateColumn:

<local:NameToImageConverter x:Key ="NameToImageConverter" />

请注意,您必须将转换器添加到窗口资源中:

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();
    }
}

在哪里&#34;本地&#34;是转换器的命名空间。和转换器本身:

var expr = new RegExp('expression');
str = str.replace(expr,replace_str);