2009-04-21 10 views
2

まず、WPFとC#の新機能ですから、おそらく問題は簡単に解決できます。しかし、私はちょっと抱きしめている。WPF:ウインドウにユーザコントロールを追加する

私の問題を説明しましょう。

私はWPFウィンドウと2つのユーザーコントロール(ControlsとContentDisplayer)を持っています。

いくつかのボタンを含むusercontrolコントロールが、ウィンドウのXAMLに追加されます。 ここに特別なものはありません。

私がやりたいことは、ユーザーがコントロールのボタンを押しているされている場合Window.XAML

<nv:Controls/> 

は今、ContentDisplayerは、私は私の窓を持っているScatterviewに追加する必要があります。

私は、ボタンをウィンドウに追加し、usercontrolコントロールを使用しないことで問題を解決しました。しかし、これは私が望むものではありません。

Window.XAML.CS

private static void Button_ContactChanged(object sender, ContactEventArgs e) 
    { 
     object ob = Application.LoadComponent(new Uri(
     "NVApril;component\\XAML\\ContentDisplayer.xaml", 
     System.UriKind.RelativeOrAbsolute)); 

    //Set a unique name to the UserControl 
     string name = String.Format("userControl{0}", 
     SurfaceWindow1_Scatterview.Items.Count); 
     UserControl userControl = ob as UserControl; 
     userControl.Name = name; 

    //Add the new control to the Scatterview 
     SurfaceWindow1_Scatterview.Items.Add(userControl); 
     SurfaceWindow1_Scatterview.RegisterName(name, userControl); 
    } 

だから、本当の問題は:どのように私は他のユーザーコントロールのボタンを押すことにより、ウィンドウにユーザーコントロールを追加するには?コントロール内

おかげで、

トナー

答えて

0

は、新しいコントロールを追加するときに発生するイベントを公開します。

public event EventHandler AddControl; 

private void RaiseAddControl() 
{ 
    if (AddControl!= null) 
    { 
     AddControl(this, EventArgs.Empty); 
    } 
} 

は今、あなたがコントロールのインスタンスにイベントを追加する必要があるように聞こえる、あなたのウィンドウでは、あなたのウィンドウ

yourControl.AddControl += ContactChanged 
0

にそのイベントをシンクします。

<local:ContentDisplayer> 
... 
    <nv:Controls AddControl="ContactChanged"/> 
... 

その後、あなたのContactChangedイベントハンドラでは、新しいコントロールのコントロールをインスタンス化することができますし、上記のあなたのButton_ContactChangedイベントハンドラのように使用しているものは何でもコレクションに追加します。

さらに詳しい説明が必要な場合はお知らせください。

2

Googleはこの問題を高く評価していますが、答えは受け入れられません。

this similar questionをお試しください。ウィンドウの上部に

3

はあなたこれらがすでに存在する場合、あなたはintellesenceリストから自分のコントロールの名前空間を選択することができます

xmlns:d="clr-namespace:SomeNamespace.Usercontrols" 

を追加XAML。

そして、あなたがコントロールタイプ置きたい:

<d:yourusercontrolhere params /> 

をし、あなたのユーザーコントロールが追加することができます。

0

私は、あなたがあなたの例をやろうとしているもの見当がつかない

ですから、このように定義されたコントロールを持っている:

public partial class somecontrolname : UserControl 

ご対応XAMLファイルで

あなたがする必要があるすべてあなたのウィンドウにコードでそれを追加するにはまずウィンドウのGridコントロールなどのLayoutRootが必要です

[mylayoutcontrol] .Children.Add(新しいsomecontr olname());

多分あなたがしようとしていることが間違っていると思います。あなたのサンプルコードはあまり意味がありません.xamlソースファイルをロードしようとしているようです。

関連する問題