2012-05-14 121 views
4

我有许多通过代码动态创建的文本框。确定哪个文本框已触发文本更改事件

我希望能够为文本的所有文本框分配一个通用事件处理程序,然后在处理程序中确定哪个文本框已激发该事件。

代码,我是:

txtStringProperty.TextChanged += TextBoxValueChanged; 

private void TextBoxValueChanged(object sender, RoutedEventArgs e) 
{ 
    string propertyName = // I would like the name attribute of the textbox here 
} 

请让我知道,如果你需要的信息了。

+0

您可能不应该通过“通过代码”创建控件,而是使用[数据模板](http://msdn.microsoft.com/zh-cn/library/ms742521.aspx)。 –

回答

7

sender参数包含哪个控件触发了该事件。你可以把它从它转换为一个文本框,并得到name属性:

string propertyName = ((TextBox)sender).Name; 
+0

谢谢。我认为这可能是这种情况,但要检查这是做到这一点的公认方式。 – user589195

2

演员object sender(你的文本框,其触发的事件),以TextBox

如果只有一个属性是什么,你要那么写

string propertyName = ((TextBox)sender).Name; 

但是,当需要不止一个属性,那么最好是创建一个文本框变量和使用它像。

TextBox txtbox = (TextBox)sender; 

然后你可以使用它的任何财产喜欢

string propertyName = txtbox.Name; 

MessageBox.Show(proptertyName); 
MessageBox.Show(txtbox.Content.ToString()); 
0

我的建议是看基类层次结构在MSDN ,只是投的控制权交给它,并提取其上定义的属性:

var name = ((ContentControl) sender).Name; 

对于更通用的实现,这也是一个很好的做法,因为将其转换为'TextBox'意味着您可以将手只有逻辑到这种类型的控制。