我对这个很陌生,到目前为止我还没有找到任何可以解决我的问题的在线解决方案。
我想通过编程方式添加它们来使用控件,它的工作和内容显示在窗口中,但是一旦我想通过按钮保存内容,事件处理程序就不会得到传递给它的变量。
我有以下情况,我不知道我错过了什么(WPF4, EF, VS2010)
在XAML中,我有一个网格,我想添加eg。一个文本框和一个按钮来自后面的代码,比如
<Grid Name="Grid1">
<Grid.RowDefinitions>
<RowDefinition Height="100"></RowDefinition>
<RowDefinition Height="50"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75*"></ColumnDefinition>
<ColumnDefinition Width="25*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="2" Name="textBox1" />
</Grid >
在后台代码:private void CheckMatching ()
{
TextBox textBox2 = new TextBox();
textBox2.Text = "textbox to fill";
textBox2.Name = "textBox2";
Grid1.Children.Add(textBox2);
Button SaveButton = new Button();
SaveButton.Name = "Save";
SaveButton.Content = "Save";
SaveButton.Click += new RoutedEventHandler(SaveButton_Click);
Grid1.Children.Add(SaveButton);
}
private void SaveButton_Click ( object sender, RoutedEventArgs e )
{
// works fine
string ShowContent1 = textBox1.Text;
// It doesn't show up in intellisense, so I cant use it yet
string ShowContent2 = textBox2.Text;
}
我可以访问XAML中文本框的内容或XAML中设置的其他所有内容,但我无法获得我在代码隐藏中设置的其他任何内容。内容本身显示在窗口中。
我已经尝试了不同的方法。
这个问题不是WPF的问题,而是关于面向对象计算机编程的一些非常基本的问题。
你怎么能期望一个对象(textBox2
)在CheckMatching
方法中被声明并在本地创建,在SaveButton_Click
方法中可用?
你可以把它限定在类级别。
private TextBox textBox2;
private void CheckMatching ()
{
this.textBox2 = new TextBox();
this.textBox2.Text = "textbox to fill";
this.textBox2.Name = "textBox2";
Grid1.Children.Add(this.textBox2);
.....
}
private void SaveButton_Click ( object sender, RoutedEventArgs e )
{
string ShowContent1 = textBox1.Text; // works fine
string ShowContent2 = this.textBox2.Text; // should work too
}
你也可以用WPF的方式....
private void SaveButton_Click ( object sender, RoutedEventArgs e )
{
string ShowContent1 = textBox1.Text; // works fine
string ShowContent2 = ((TextBox)Grid1.Children[1]).Text; // should work too
}