我用下面的代码创建一个TextBox:

TextBox textBox = new TextBox();
textBox.Name = propertyName;
textBox.Text = value;
textBox.Width = FormControlColumnWidth;
textBox.SetResourceReference(Control.StyleProperty, "FormTextBoxStyle");

sp.Children.Add(textBox); //StackPanel
FormBase.Children.Add(sp);


单击按钮后,我想获取该文本框的文本值,但无法在代码中指定:

string firstName = FirstName.Text;


因为将在运行时定义“名字”。那么,如何在编译时不知道文本框名称的情况下获取文本框的文本值呢?

以下是我到目前为止的内容,但它说即使在运行时定义了它也找不到“ FirstName”:

private void Button_Save(object sender, RoutedEventArgs e)
{
    using (var db = Datasource.GetContext())
    {
        var item = (from i in db.Customers
                        where i.Id == TheId
                        select i).SingleOrDefault();

        item.FirstName = ((TextBox)FindResource("FirstName")).Text;
        db.SubmitChanges();
    }
}


可复制的示例:

我在此处发布了此问题的完整示例,并提供了完整的示例:Why can't I access a TextBox by Name with FindName()?,也许更易于分析。

最佳答案

最简单的解决方案可能是在代码中的某个位置保留对文本框的引用。只需添加一个

private TextBox _textbox


在类的顶部,并将其设置为您在代码中添加的TextBox。然后,您可以在Button_Save事件处理程序中引用它。

关于c# - 如何获取在运行时分配了名称的TextBox的Text值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1755231/

10-15 10:54