[英]C# WPF - Adding an image to a dataset or datagrid - code behind only
我有一個在開始時定義的數據網格
DataGrid dtgWatch;
並鏈接到數據集dtsWatch;
dtgWatch.ItemsSource = dtsWatch.Tables[0].DefaultView;
在中間,數據集填充有
dtsWatch.Tables[0].Rows.Add(string1, string2);
目的類似於以下選項卡:
| string1_A | string2_A |
| string1_B | string2_B |
| string1_B | string2_C |
正常工作。 現在進行更改:在該推理的一個點上(僅一行),我必須放置圖片而不是字符串。 這意味着:
| string1_A | string2_A |
| string1_B | Image2_B | <---------------
| string1_B | string2_C |
從理論上講,這應該工作(沒有編譯錯誤),以防出現圖像的情況
Image img =...
dtsWatch.Tables[0].Rows.Add(string1, img);
但結果是
| 字符串1 | System.Windows.Controls.Image |
我想到的一種可能的解決方案是將標記放在某個位置,然后在運行時(加載行事件或類似事件)更改帶有圖像的單元格的內容。 不幸的是我可以這樣做,因為我可以直接訪問和修改單元格。
我正在使用帶有appdomain tecnique的C#wpf進行所有操作。 這意味着我還沒有xaml,我必須在代碼背后做所有事情。 我所擁有的只是一個要與datagrid添加的網格。
我已經嘗試過了,但是還沒有完成,我發現的所有其他解決方案都暗示着要使用xaml
謝謝你的幫助
帕特里克
為了實現所需的行為,您必須手動創建DataGridColumns。
您仍然可以編寫Xaml,因為您可以輕松地在后面的代碼中解析並創建相應的對象。 請參閱System.Windows.Markup.XamlReader.Load
所以這應該為你工作
dtgWatch.AutoGenerateColumns = false;
foreach (DataColumn column in dtsWatch.Tables[0].Columns)
{
string dataGridTemplateColumn = $@"
<DataGridTemplateColumn
Header=""{column.ColumnName}""
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content=""{{Binding {column.ColumnName}}}"" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>";
XmlReader xr = XmlReader.Create(new StringReader(dataGridTemplateColumn));
dtgWatch.Columns.Add((DataGridTemplateColumn)System.Windows.Markup.XamlReader.Load(xr));
}
好的,我采用了另一種方法:
private void Dg_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < dg.Items.Count; i++)
{
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(i);
for (int j = 0; j < dg.Columns.Count; j++)
{
TextBlock cellContent = dg.Columns[j].GetCellContent(row) as TextBlock;
var strContent = cellContent.Text;
if (strContent == "BBB2")
{
// This if I want merely change the value (not my case)
//cellContent.Text = "XXXX";
//This if I want to put an image
var dtgCell = cellContent.Parent as DataGridCell;
dtgCell.Content = new Image() { Source = new BitmapImage(new Uri(@"C:\Users\Pictures\Ball_Red.png")) };
}
}
}
}
因此,我嘗試在顯示之前修改dtg,然后將其更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.