2012-04-18 23 views
0

マイユーザーコントロールが原因ヌルフィールドに起動に失敗し、Imは本当にイライラ起動に失敗し、私は、下のコードを持っている:ユーザーコントロールが原因ヌルフィールドに

 public MyControl() 
     { 
     protected override void OnInitialized(EventArgs e) 
     { 
     base.OnInitialized(e); 
     string userinputMainWindow = (string)App.Current.Properties["TextBoxString"]; 
     Foreach 
     { 
      TextBlock textBlock2 = new TextBlock(); 
      textBlock2.Text = String.Format(userinputMainWindow); // null 
      textBlock2.TextAlignment = TextAlignment.Left; 

しかし、私は、これは私が必要なものであると思ういけませんどのようにして起動時にコードを初期化せず、コードを呼び出すときに初期化を停止することができますか?初期化とだけ私はbtnGeneral_Clickをクリックしたときにユーザーコントロールを停止する方法はあり

private Dictionary<string, UserControl> _userControls = new Dictionary<string, UserControl>(); 
    public Dictionary<string, UserControl> GetUserControls() 
    { 
     return _userControls; 
    } 
    public MainWindow() 
    { 
     InitializeComponent(); 

     List<string> userControlKeys = new List<string>(); 
     userControlKeys.Add("MyControl"); 
     Type type = this.GetType(); 
     Assembly assembly = type.Assembly; 
     foreach (string userControlKey in userControlKeys) 
     { 
      string userControlFullName = String.Format("{0}.UserControls.{1}", type.Namespace, userControlKey); 
      UserControl userControl = (UserControl)assembly.CreateInstance(userControlFullName); 
      _userControls.Add(userControlKey, userControl); 
     } 

    } 
    private void btnGeneral_Click(object sender, RoutedEventArgs e) 
    { 

     App.Current.Properties["TextBoxString"] = textBox1.Text; 

     PanelMainContent.Children.Clear(); 
     Button button = (Button)e.OriginalSource; 
     Type type = this.GetType(); 
     Assembly assembly = type.Assembly; 

     PanelMainContent.Children.Add(_userControls[button.Tag.ToString()]); 
    } 

:私はこのようなユーザーコントロールを呼び出す私のメインウィンドウ上のインスタンスについて

+1

あなたは '_userControls'のインスタンスを作成している場合は?代わりに 'btnGeneral_Click'の中でそれを行うことができますか? – mellamokb

+0

私はすでに更新が表示されていますが、問題は起動時に問題あります。ユーザーが情報を入力したときにメインウィンドウを使用して情報を渡すため、usercontrolフィールドの一部がヌルであるため開始できません。 –

+0

UserControlからコードを投稿できますか?どのフィールドがヌルですか?いつそれらを設定しようとしていますか? – roomaroo

答えて

1

通常、このようなことはデータバインディングによって行われますが、パネルに追加する前にusercontrolのプロパティを設定するだけで、これを迅速に実行できます。

は、ユーザーコントロールにプロパティを追加します。btnGeneral_Click

public string TextBlockString 
{ 
    get 
    { 
     return this.textBlock2.Text; 
    } 

    set 
    { 
     this.textBlock2.Text = value; 
    } 
} 

そしてを:

private void btnGeneral_Click(object sender, RoutedEventArgs e) 
{ 

    App.Current.Properties["TextBoxString"] = textBox1.Text; 

    PanelMainContent.Children.Clear(); 
    Button button = (Button)e.OriginalSource; 
    Type type = this.GetType(); 
    Assembly assembly = type.Assembly; 

    MyControl myControl = _userControls[button.Tag.ToString()]; 
    myControl.TextBlockString = textBox1.Text; 

    PanelMainContent.Children.Add(myControl); 
} 
関連する問題