C# 用户控件之间的交互

C# 用户控件之间的交互,c#,wpf,C#,Wpf,我在wpf应用程序中有2个UserControl。在我的用户控件A中,当我单击按钮时,它将从用户控件B获取文本框中的文本。当我单击A中的按钮时,如何访问文本框中的文本 public partial class UserControlB : UserControl { public string TextBoxText { get { return this.TextBoxB.Text; } } } 然后在usercontrol A中,当我单击按钮时 privat

我在wpf应用程序中有2个UserControl。在我的用户控件A中,当我单击按钮时,它将从用户控件B获取文本框中的文本。当我单击A中的按钮时,如何访问文本框中的文本

  public partial class UserControlB : UserControl
  {
      public string TextBoxText { get { return this.TextBoxB.Text; } }
  }
然后在usercontrol A中,当我单击按钮时

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        String s = UserControlB.TextBoxText ;

    }

在B中添加属性,返回文本框的文本:

public class UserControlB
{
    public string TextBoxText { get { return this.TextBox1.Text; } }
}
在xaml中找到UserControl B的实例,然后按如下方式调用该属性:

string txt = this.UserControlB.TextBoxText;

我知道这是一个简短的答案,但我认为FindControl(“textboxName”)应该可以工作


string text=userControlB.FindControl(“textbox”)

在您的问题中,您没有正确引用您的
userControlB

private void button1_Click(object sender, RoutedEventArgs e)     
{
    String s = UserControlB.TextBoxText ;      
}
这里您看到的是名为
UserControlB
的类,而不是
UserControlB
的对象或实例。换句话说,您没有指定要查看的
UserControlB
。如果屏幕上有五个
UserControlB
,按钮如何知道要使用哪一个

阅读以了解类(如
UserControlB
)和对象(可在程序中引用和使用的项)之间的区别

如果您想使用页面或视图上的
UserControlB
,则应该有一个
名称
。找到名称后,您可以这样引用它:

// inside the control which contains your UserControlB
public MainPage()
{
    // find it according to its Name property
    UserControlB theOneIWantToUse = this.UserControlB_1;

    // once you identify it, you can get the Text value from it
    String s = theOneIWantToUse.Text;
}
您可以尝试以下方法:

在用户控件A中

私有无效按钮1\u单击(对象发送者,路由目标) {

}


如果控件彼此可以访问(检查修饰符),请使用它们的对象来获取值。如果对象不可访问,请尝试搜索目标控件。我们如何检查修饰符?我的意思是,检查有问题的控件是否为“公共”或“私有/受保护”。如果为“公共”,您可以直接访问对象。我在usercontrolB中这样做,但在usercontrolA端,我无法从C代码访问文本框。它说,非静态字段方法或属性项(如静态字段和非静态字段的混合)需要对象引用。密码!已编辑的代码。除了上面的部分,还有什么我需要添加的吗?@edelweiss正如我提到的,你必须找到UserControlB的实例,而不是直接使用UserControlB(作为一种类型)。@ojlovecd我如何找到我的UserControlB实例?你可能有一个名为与其类型相同的实例,在这种情况下,我偏离了目标,但这很糟糕!对不起,UserControlB_1指的是什么?usercontrolB的名称?@edelweiss是的,不管控件的
name
属性设置为什么。B是第二个usercontrolB的名称,就像您在问题中所说的。同样,TextBoxB是用户控件B中要从用户控件A读取的文本框。
   MainWindow rootWindow = Application.Current.MainWindow as MainWindow;
   String s = (String)rootWindow.B.TextBoxB.text;