Взаимодействие между пользовательскими элементами управления - PullRequest
1 голос
/ 09 ноября 2011

У меня есть 2 пользовательских элемента управления в приложении wpf.В моем пользовательском элементе управления A, когда я нажимаю кнопку, он извлекает текст внутри текстового поля из пользовательского элемента управления B. Как получить доступ к тексту в текстовом поле, когда я нажимаю кнопку в A?

  public partial class UserControlB : UserControl
  {
      public string TextBoxText { get { return this.TextBoxB.Text; } }
  }

Затем в пользовательском контроле A, когда я нажимаю кнопку

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

    }

Ответы [ 4 ]

2 голосов
/ 09 ноября 2011

Добавьте свойство в B, возвращая текст TextBox:

public class UserControlB
{
    public string TextBoxText { get { return this.TextBox1.Text; } }
}

Найдите экземпляр UserControl B в вашем xaml, затем вызовите свойство следующим образом:

string txt = this.UserControlB.TextBoxText;
0 голосов
/ 09 ноября 2011

Вы можете попробовать это:

В UserControl A,

private void button1_Click (отправитель объекта, RoutedEventArgs e) {

   MainWindow rootWindow = Application.Current.MainWindow as MainWindow;
   String s = (String)rootWindow.B.TextBoxB.text;

}

0 голосов
/ 09 ноября 2011

В вашем вопросе вы не правильно ссылаетесь на UserControlB

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

Здесь вы видите класс с именем UserControlB, а не объект или экземпляр из UserControlB. Другими словами, вы не указываете , который UserControlB вы хотите посмотреть. Если на вашем экране было пять UserControlB, как кнопка узнает, какой из них использовать?

Прочитайте Классы и объекты , чтобы узнать о разнице между классами (например, UserControlB) и объектами (элементами, на которые вы можете ссылаться и использовать в своей программе).

UserControlB, который у вас есть на вашей странице или представлении, должен иметь Name, если вы хотите его использовать. Найдя имя, вы можете ссылаться на него следующим образом:

// 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;
}
0 голосов
/ 09 ноября 2011

Я знаю, что это короткий ответ, но я думаю, что FindControl ("textboxName ') должен работать.

string text = userControlB.FindControl ("textbox")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...