null フィールドが原因でユーザー コントロールが起動せず、非常にイライラしています。コードは次のとおりです。
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;
しかし、これが必要だとは思いません。コードが起動時に初期化され、コードを呼び出すときにのみ初期化されるのをどのように停止できますか?
たとえば、メイン ウィンドウでは、次のようにユーザー コントロールを呼び出します。
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()]);
}
ユーザー コントロールの初期化を停止する方法はありますbtnGeneral_Click
か?