WPF 将图像添加到列中的单元格
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15835667/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
WPF add image to cell in column
提问by lemunk
Using C#.NET4.5, Visual Studio 2012, WPF.
使用 C#.NET4.5、Visual Studio 2012、WPF。
Well here's how far I got with a lot of help from great people and advice!
好吧,这就是我在伟大人物和建议的帮助下取得的进展!
Set up a new column for images:
为图像设置一个新列:
DataGridTemplateColumn p1 = new DataGridTemplateColumn();
p1.Header = "p1";
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(System.Windows.Controls.Image));
Binding b1 = new Binding("picture");
b1.Mode = BindingMode.TwoWay;
factory1.SetValue(System.Windows.Controls.Image.SourceProperty, b1);
DataTemplate cellTemplate1 = new DataTemplate();
cellTemplate1.VisualTree = factory1;
p1.CellTemplate = cellTemplate1;
paretogrid.Columns.Add(p1);
Then I check each "row" and set up some Ifs to check values:
然后我检查每个“行”并设置一些 Ifs 来检查值:
private void ShowArrows()
{
var rows = GetDataGridRow(paretogrid);
foreach (DataGridRow r in rows)
{
DataRowView rv = (DataRowView)r.Item;
var par3 = paretogrid.Columns[7].GetCellContent(paretogrid.Items[2]) as TextBlock;
int pconv3 = Convert.ToInt32(par3.Text);
var par2 = paretogrid.Columns[8].GetCellContent(paretogrid.Items[2]) as TextBlock;
int pconv2 = Convert.ToInt32(par2.Text);
var par1 = paretogrid.Columns[9].GetCellContent(paretogrid.Items[2]) as TextBlock;
int pconv1 = Convert.ToInt32(par1.Text);
var parNew = paretogrid.Columns[10].GetCellContent(paretogrid.Items[2]) as TextBlock;
int pconvNew = Convert.ToInt32(parNew.Text);
if(pconv3 == pconv2)
{
paretogrid.Columns[12].
}else
if(pconv3 > pconv2)
{
//uparrow
}
else
if (pconv3 < pconv2)
{
//down
}
}
}
So as you can see I step through, throw it into a few nested conditions then where the comments are is where I want to add the images, something like :
因此,正如您所看到的,我逐步完成,将其放入一些嵌套条件中,然后注释所在的位置就是我要添加图像的位置,例如:
paretogrid.columns[12].setvalue(can image go here? asks for dependency);
not sure how to add the image all I see is adding images to an entire column via the item source.
不知道如何添加图像我看到的只是通过项目源将图像添加到整个列。
Where am I going wrong?
我哪里错了?
EDIT: 08/04/2013Ok got two suggestions, so far no errors are happening which is always nice to me. unfortunatly no images are showing up.
编辑:08/04/2013好的,有两个建议,到目前为止没有发生错误,这对我来说总是很好。不幸的是没有图像显示。
Datagrid.Children.Add();
for some reason my datagrid does not have this .Children method in the intellisense, even when I force it it just redlines me. What am I missing?
出于某种原因,我的数据网格在智能感知中没有这个 .Children 方法,即使我强制它只是红线我。我错过了什么?
Not big on XAML so heres the grid.
XAML 不大,所以这里是网格。
Grid Margin="10,13,6,-13" Background="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" HorizontalAlignment="Left" Width="1442">
<DataGrid Name ="paretogrid" HorizontalAlignment="Left" Height="500" Margin="16,63,0,0" VerticalAlignment="Top" Width="1126" RenderTransformOrigin="0.5,0.5" Background="{x:Null}" FontSize="14" SelectionChanged="paretogrid_SelectionChanged">
回答by Olimpiu Datcu
I don't have exactly your environment (VS2012 and Windows 8), but in wpf you can access properties also with the SetValue()method. You could try to use something like this:
我没有完全符合您的环境(VS2012 和 Windows 8),但在 wpf 中,您也可以使用该SetValue()方法访问属性。你可以尝试使用这样的东西:
Image img = new Image();
img.SetValue(Grid.ColumnProperty, "2");
img.SetValue(Grid.RowProperty, "1");
Hope it helps.
希望能帮助到你。
I have tested a small demo on my machine and it works well. Here is the xaml:
我在我的机器上测试了一个小演示,它运行良好。这是xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="paretoGrid">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
and the code behind:
以及背后的代码:
var img = new Image {Width = 100, Height = 100};
var bitmapImage= new BitmapImage (new Uri(@"pack://application:,,,/Images/old-go-down.png"));
img.Source = bitmapImage;
img.SetValue(Grid.RowProperty, 1);
img.SetValue(Grid.ColumnProperty, 1);
paretoGrid.Children.Add(img);
Image Build Action has to be set as Resource.
Image Build Action 必须设置为Resource。

