2017-09-07 10 views
1

C#とWPFの新機能です。私はキャンバスや楕円などで遊んでいます。 メソッド内のオブジェクト名としてパラメータを使用する方法C#

私は新しいキャンバスを作成する方法を作成しました:私は、例えば、キャンバスに別の子を追加したい場合は、この方法で作成

public void CreateCanvas(Canvas parentCanvas, int height, int width, double xCoord, double yCoord) 
    { 
     Canvas new_canvas = new Canvas(); 
     new_canvas.Background = new SolidColorBrush(Colors.Red); 
     new_canvas.Height = height; 
     new_canvas.Width = width; 
     Canvas.SetLeft(new_canvas, xCoord); 
     Canvas.SetTop(new_canvas, yCoord); 
     parentCanvas.Children.Add(new_canvas); 

    } 

、私はキャンバスの名前を必要とします。 私の推測では、キャンバス名もパラメータにすることです。 まあ、手がかりがありません。

私はこのように見えます。私が何をしたいか

public void CreateCanvas(Canvas parentCanvas, string canvasName, int height, int width, double xCoord, double yCoord) 
{ 
    Canvas canvasName = new Canvas(); 
    canvasName.Background = new SolidColorBrush(Colors.Red); 
    canvasName.Height = height; 
    canvasName.Width = width; 
    Canvas.SetLeft(canvasName, xCoord); 
    Canvas.SetTop(canvasName, yCoord); 
    parentCanvas.Children.Add(canvasName); 

} 

は、キャンバスが出回っ作成された後、私はこの方法で作成されたキャンバスに子(Children.Add)としてテキストブロックを追加することです。

+2

だけでは不可能だと、なぜあなたもそれを行うのでしょうか?キャンバスを子リストに追加してメソッドを終了すると、キャンバス名はとにかく失われます。 – Milster

+0

私はキャンバスを追加したり、動詞的に楕円を追加したり、その内部にテキストを作成したりします。 私は幾つかのキャンバスやフォームを知っていないので、新しいものを作る方法が助けになると思った。好きなこと:(何かが起こった場合)新しいキャンバスを作成します。他のものが発生した場合、子供を追加するためにキャンバス名が必要です –

+1

多分、あなたは 'Dictionary のようなものが欲しいでしょうか?しかし、そこには多量の問題があるかもしれません...あなたはフルフィルをしようとしていますか? – Corak

答えて

0

このようなあなたのCanvas作成:

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
    { 
     if (depObj != null) 
     { 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
      { 
       DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
       if (child != null && child is T) 
       { 
        yield return (T)child; 
       } 

       foreach (T childOfChild in FindVisualChildren<T>(child)) 
       { 
        yield return childOfChild; 
       } 
      } 
     } 
    } 

ソースコードHere

から取られ、ちょうど呼び出し後にtextblockを追加することを:次に、あなたが使用して、そのNamePropertyで子供を見つけることができます

public void CreateCanvas(Canvas parentCanvas,string CanvasName, int height, int width, double xCoord, double yCoord) 
{ 
    Canvas new_canvas = new Canvas();   
    new_canvas.Name = CanvasName; //assign Name here  
    new_canvas.Background = new SolidColorBrush(Colors.Red); 
    new_canvas.Height = height; 
    new_canvas.Width = width; 
    Canvas.SetLeft(new_canvas, xCoord); 
    Canvas.SetTop(new_canvas, yCoord); 
    parentCanvas.Children.Add(new_canvas); 
} 

を:

foreach (Canvas child in FindVisualChildren<Canvas>(this).Where(x => !string.IsNullOrEmpty(x.Name) && x.Name.Equals("MyCanvas"))) 
{ 
    child.Children.Add(new TextBlock() { Text = "Dynamimcally Added Textblock" }); 
} 

また、後で使用するcanvasの名前を知っておく必要があります。 Canvasを作成するための

CreateCanvas(ParentCanvas,"MyCanvas", 200, 200, 0, 0); 
+0

ありがとう!これは動作します –

+0

喜んで:) – tabby

関連する問題