3

ウィンドウのラップパネルにコントロールを動的に追加しようとしていますが、2つのラップパネルコントロールが元のラップパネルコントロールに追加された後、それはもう追加されませんここに画像を追加するために使用するコードがあります

 Random rn = new Random();
 ImageContainer.Children.Add(displayimage(rn.Next(amount)));            
 ImageContainer.InvalidateVisual();

私はwpfに不慣れで、何か間違ったことをしているのか、何かが足りないのか疑問に思っています。

どんな助けでも大歓迎です

編集

        public WrapPanel displayimage(int i)
       {

        WrapPanel pn = new WrapPanel();
        pn.Width = 350;
        pn.Height = 400;
        pn.Background = new SolidColorBrush(Colors.White);
        BitmapImage bm = new BitmapImage(new Uri(imagePaths[i]));
        Image im = new Image();
        im.Source = bm;
        im.Height = 300;
        im.Width = 400;
        im.Margin = new Thickness(25,25,25,25);
        pn.Children.Add(im);
        pn.Margin = Location(pn);
        pn.ClipToBounds = true;

        return pn;

    }
4

1 に答える 1

6

コンテナコントロールのランダムな場所に画像を配置するには、WrapPanelではなく、Canvasを使用する必要があります。キャンバスは、要素の絶対的な配置のために作られています。Canvas.LeftandCanvas.Topプロパティ(またはCanvas.Rightまたは)を設定して、Canvasの子要素の位置を設定しますCanvas.Bottom

Imageさらに、任意のコンテナに直接追加できるコントロールのように、「内部」パネルは必要ありません。

したがって、次のdisplayimageようにメソッドを変更します。

public UIElement GetDisplayImage(int i)
{
    var bm = new BitmapImage(new Uri(imagePaths[i]));
    var im = new Image
    {
        Source = bm,
        Height = 300,
        Width = 400
    };
    var location = Location(im);
    Canvas.SetLeft(im, location.X);
    Canvas.SetTop(im, location.Y);
    return im;
}

次に、これらの画像をキャンバスに追加します。

Random rn = new Random();
ImageCanvas.Children.Add(GetDisplayImage(rn.Next(amount));

InvalidateVisual必要ありません。


Random.Nextまた、同じ番号が複数回返される可能性があるため、画像が複数回追加されないように注意する必要がある場合があります。

于 2013-01-20T20:28:02.867 に答える