Как получить доступ к определенному элементу управления в пользовательском элементе управления? - PullRequest
0 голосов
/ 23 февраля 2019

Допустим, у меня есть пользовательский элемент управления с некоторыми элементами управления внутри него, и я делаю этот элемент управления видимым внутри формы.Как получить доступ к определенному элементу управления в этом элементе управления пользователя?Например, раньше, если у меня была метка внутри формы, все, что я делал, было label.Text = "text";но как бы я изменил текст метки (только для примера), который находится внутри пользовательского элемента управления, который находится внутри формы?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я не совсем уверен в вашем контексте, поэтому вот решение из моей интерпретации:

Обычно пользовательские элементы управления используются, когда у вас большое количество UIElement одного типа.Я мог бы добавить все это на панель стека, например.Если у меня есть открытый идентификатор в классе управления пользователями, я могу найти этот конкретный идентификатор и изменить его текст.

MyUserControl.xaml.cs:

//ATextBox is a named Control
public MyUserControl(int ID)
{
    InitializeComponent();
    this.ID = ID;
    ATextBox.Text = "Something";
}

MainWindow.xaml.cs:

//MyStackPanel is a named Control
foreach (MyUserControl muc in MyStackPanel.Children)
{
    //ID is public get, private set
    if(muc.ID == 123456)
    {
        muc.ATextBox.Text = "Something Else";
    }
}

Я позволю себе немного позаботиться о том, как я могу настроить разрешения и т. Д., Но, надеюсь, это иллюстрирует один из способов, которым вы можете это сделать.В качестве альтернативы, если пользователь напрямую взаимодействует с пользовательским элементом управления, вы можете настроить логику прямо в классе пользовательского элемента управления.

0 голосов
/ 23 февраля 2019

Создайте открытый метод в вашем пользовательском элементе управления и вызовите его из формы:

public void SetCaption(string caption)
{
    label1.Text = caption;
}

, теперь в вашей форме:

userControl1.SetCaption("text");

Для доступа к самому элементу управления, как вы предложили вкомментарии, вы можете создать публичное свойство в вашем usercontrol, которое возвращает желаемый элемент управления:

public Label MyLabel {get { return Label1; }}

, а затем в вашей форме:

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