我正在开发一个C#WPF项目。我有多个按钮,我希望基本上做同样的事情,但将结果发布回不同的文本框。类似于下面的xaml片段:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBox x:Name="ATextbox"/>
<TextBox x:Name="BTextbox"/>
<TextBox x:Name="CTextbox"/>
</StackPanel>
<StackPanel Grid.Column="1">
<Button x:Name="AButton" Click="Button_Click" Content="Foo" Grid.Column="1"/>
<Button x:Name="BButton" Click="Button_Click" Content="Foo" Grid.Column="1"/>
<Button x:Name="CButton" Click="Button_Click" Content="Foo" Grid.Column="1"/>
</StackPanel>
</Grid>
正如你所看到的,我真的想要一个单击&#34;点击&#34;处理所有三个按钮的方法。我希望C#看起来像下面这样:
private void Button_Click(object sender, EventArgs e)
{
//Get the name of the button clicked
DependencyObject dpsender = sender as DependencyObject;
string name = dpsender.GetValue(FrameworkElement.NameProperty) as string;
string subName = name.Substring(0, 1);
string tbName = subName + "Textbox";
string text = "Calculated text";
tbName.Text = text;
}
我基本上得到了点击按钮的名称,抓住前缀(A,B或C),然后连接前缀和&#34; Textbox&#34;获取文本框的名称我想要将数据放入。
最后一行显然不起作用,因为tbName是一个字符串,它没有&#34; Text&#34;属性。但是,我知道在运行时,文本框对象的名称将包含在tbName变量中。有没有办法实现我想做的事情?我知道我显然可以为每个按钮创建单独的方法,但如果可能的话,我宁愿避免使用它。
由于
答案 0 :(得分:1)
你应该学习mvvm。
与此同时,滥用按钮上的标签并将其绑定到您感兴趣的文本框。通过抓取它来获取对它们的引用。
类似的东西:
<Button x:Name="AButton" Tag="{Binding ElementName=ATextBox}"
和
private void Button_Click(object sender, EventArgs e)
{
//Get the name of the button clicked
Button btn = sender as Button;
((TextBox)btn.Tag).Text = "Calculated text";
}
这只是空中代码,可能有拼写错误。