Ваш код не так уж сложен!
Однако вы можете упростить его, используя Linq-to-VisualTree :
private void RadioButton_Click(object sender, RoutedEventArgs e)
{
RadioButton rb = sender as RadioButton;
TextBox txtbox= rb.Ancestors<DockPanel>().First().Elements<TextBox>().First() as TextBox;
MessageBox.Show(txtbox.Text);
}
Запрос Linq выше находитпервый DockPanel
предок вашего RadioButton
(то есть Parent.Parent
, который вы хотели!), затем находит первого TextBox
потомка DockPanel
.
Однако я обычно использую Linq-to-VisualTree в случаях, когда запрос является более сложным.Я думаю, что ваш подход в порядке!