多个Textbox WPF的一个功能

时间:2015-03-31 12:36:42

标签: c# wpf

我有5个文本框可以双击编辑。

以下是我为一个文本框编写的方法。

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            txtFirstLctrTime.IsReadOnly = false;
            txtFirstLctrTime.Background = new SolidColorBrush(Colors.White);
            txtFirstLctrTime.Foreground = new SolidColorBrush(Colors.Black);
        }

有什么方法可以对所有文本框使用相同的方法而不是为所有文本编写不同的方法?我是编程新手

4 个答案:

答案 0 :(得分:3)

您可以将此处理程序提供给所有文本框。然后检查发件人,因为这是您实际点击的文本框:

    private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var textBox = sender as TextBox;

        textBox.IsReadOnly = false;
        textBox.Background = new SolidColorBrush(Colors.White);
        textBox.Foreground = new SolidColorBrush(Colors.Black);
    }

你应该研究MVVM和数据绑定思想,有点击处理程序和代码隐藏有它的限制。

答案 1 :(得分:1)

将相同的处理程序附加到所有文本框,并使用sender参数获取引发事件的文本框实例:

private void  MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
     TextBox textBox = (TextBox)sender;
    textBox.IsReadOnly = false;
    textBox.Background = new SolidColorBrush(Colors.White);
    textBox.Foreground = new SolidColorBrush(Colors.Black);
}

答案 2 :(得分:0)

是的,有办法。 Sender是一个参数,它可以告诉你哪个控件触发了这个事件。看看下面的例子:

private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
  TextBox tbWhichFiredThisEvent = sender as TextBox;
  if(tbWhichFiredThisEvent != null)
  {
    tbWhichFiredThisEvent.IsReadOnly = false;
    // ... etc.
  }
}

答案 3 :(得分:0)

另一种选择是从TextBox继承并在OnDoubleClick方法上实现您的特定行为。

通过这种方式,您可以在不重复的代码上对不同的视图进行此控制。