Для вашей конкретной проблемы я могу предложить вам конкретное решение. Это не может рассматриваться как общее.
Ваша проблема - прочитать содержимое текстовых полей в вашем пользовательском элементе управления одним нажатием кнопки.
Вот решение.
В этом решении будут два файла xaml и соответствующие им файлы .cs.
Логика : - Логика заключается в том, чтобы перебирать визуальные элементы пользовательского элемента управления, находить текстовые поля, читать текст в нем по нажатию кнопки.
Так вот код ...
Window.xaml - это наше главное окно. Он содержит 1 кнопку и ссылку на объект пользовательского элемента управления.
<Grid>
<StackPanel Orientation="Vertical">
<Button x:Name="clickThis"
Height="30"
Width="70"
Content="Click Me!!"
Click="clickThis_Click" />
<local:TxtBoxedUC x:Name="UC" />
</StackPanel>
</Grid>
TxtBoxedUC.xaml - Это наш пользовательский элемент управления. Это содержит наши два текстовых поля.
<Grid>
<StackPanel Orientation="Vertical">
<TextBox x:Name="txt1"
Width="150"
Height="30" />
<TextBox x:Name="txt2"
Width="150"
Height="30" />
</StackPanel>
</Grid>
Window1.xaml.cs - содержит метод нажатия кнопки, а также метод итерации визуальных элементов в пользовательском элементе управления.
private void clickThis_Click(object sender, RoutedEventArgs e)
{
GetVisual(UC);
}
Приведенный выше код предназначен для обработки нажатия кнопки.
private void GetVisual(UIElement currentVisual)
{
int count = VisualTreeHelper.GetChildrenCount(currentVisual);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
UIElement uiElement = VisualTreeHelper.GetChild(currentVisual, i) as UIElement;
if (uiElement != null)
{
if (uiElement.GetType() == typeof(TextBox))
{
TextBox txt = uiElement as TextBox;
MessageBox.Show(txt.Text);
}
}
GetVisual(uiElement);
}
}
}
Выше код должен перебирать визуальные элементы в пользовательском элементе управления.
Файл .cs пользовательского элемента управления не требуется.
Теперь, когда вы нажимаете на кнопку, вы видите, что вы ввели в MessageBox.
Счастливого кодирования ...
Пожалуйста, отметьте как ответ, если это решит вашу проблему.