2013-04-05 91 views
0

使用C#.NET4.5,Visual Studio 2012,WPF。WPF將圖像添加到列中的單元格

那麼這裏有多遠,我得到了很多來自偉大人士和建議的幫助!

建立一個新的列圖片:

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

然後我檢查每一個「行」,並設置了一些If語句來檢查值:

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 
       } 
    } 
} 

因此,大家可以看到我通過步驟,把它扔進幾個嵌套的條件,然後評論的地方是我想要添加圖像的地方,如:

paretogrid.columns[12].setvalue(can image go here? asks for dependency); 

不知道如何添加圖像,我看到的是通過項目源添加圖像到整個列。

我哪裏錯了?

編輯:08/04/2013 好吧有兩個建議,到目前爲止沒有發生任何錯誤,這對我來說總是很好。不幸的是沒有圖像顯示出來。

Datagrid.Children.Add(); 

由於某種原因,我的DataGrid沒有在智能感知這種方法。孩子,甚至當我強迫它只是紅線我。我錯過了什麼?

對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"> 
+0

有人嗎?沒有圖像顯示出來,我猜想是因爲實際上沒有添加到網格中,如果是這樣,我該怎麼做?谷歌搜索大部分時間尋找解決方案,但沒有運氣 – lemunk 2013-04-08 15:00:33

回答

2

我沒有確切的環境(VS2012和Windows 8),但在WPF也可以訪問性能與SetValue()方法。你可以嘗試使用這樣的東西:

Image img = new Image(); 
img.SetValue(Grid.ColumnProperty, "2"); 
img.SetValue(Grid.RowProperty, "1"); 

希望它有幫助。

我已經在我的機器上測試過一個小演示,它運行良好。這裏是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> 

和後面的代碼:

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

圖像生成操作已被設置爲資源。

+0

設置此錯誤,但沒有出現任何圖像。 – lemunk 2013-04-08 08:10:35

+0

你可以用Snoop看對象,看看它是否在那裏?確保設置了圖像源,並查看寬度/高度。如在凱爾的文章中,將圖像添加到您的網格(paretogrid在您的情況)paretogrid.Children.Add(img) – 2013-04-08 10:24:09

+0

paretogrid intelisence無法識別.children出於某種原因。圖像源設置是這樣的:ImageSource imageSource = new BitmapImage(new Uri(「C:\ ....)); upArrow.Source = imageSource; System.Windows.Controls.Image myUp = new System.Windows.Controls。圖片(); – lemunk 2013-04-08 11:04:23

相關問題