0

C#.NET4.5、Visual Studio 2012、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);

画像を追加する方法がわからないのは、項目ソースを介して列全体に画像を追加することだけです。

どこが間違っていますか?

編集: 2013年 8 月 4 日 2 つの提案がありましたが、これまでのところエラーは発生していません。残念ながら画像は表示されません。

Datagrid.Children.Add();

何らかの理由で、私のデータグリッドには、インテリセンスでこの .Children メソッドがありません。強制しても、赤線を引くだけです。私は何が欠けていますか?

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">
4

1 に答える 1

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

イメージ ビルド アクションはリソースとして設定する必要があります。

于 2013-04-05T15:47:50.340 に答える