2015-01-02 2 views
0

я хочу знать х: Имя Сетевого ребенка, как и в этом случае:Как получить x: Название сетки?

<Grid x:Name="one" Grid.Row="0" Margin="49.667,15,15,15"> 
     <Grid x:Name="container1" Background="Red" Margin="10"/> 
     </Grid> 
    <Button Content="mov" Foreground="White" x:Name="first" HorizontalAlignment="Left" Margin="8,44.833,0,70.167" Width="29.334" Background="Black" Click="first_Click"/> 

и вот код, когда я нажимаю:

private void first_Click(object sender, System.Windows.RoutedEventArgs e) 
    { 

     var ttt = FindVisualChild<Grid>(one); 
     MessageBox.Show(ttt.ToString()); 

    } 

    private static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(parent, i); 
      if (child != null && child is T) 
       return (T)child; 
      else 
      { 
       T childOfChild = FindVisualChild<T>(child); 
       if (childOfChild != null) 
        return childOfChild; 
      } 
     } 
     return null; 
    } 

Когда я нажимаю сообщение просто показать это содержание «System.Window.Controls.Grid» вместо этого я хочу узнать имя x в этом случае «container1», и тогда я спрашиваю, есть ли у вас предложение, чтобы я мог получить x: Name of Grid.

Заранее спасибо.

С уважением

+1

Пробовали ли вы 'ttt.Name'? – dkozl

+0

@ dkozl Да, вы правы !!! Большое вам спасибо за это ... если вы ответите как ответ, я отметю его !!! – JayJay

ответ

1

Заслуга dkozl для предоставления вам ответ в комментариях ОП. Я хотел дать немного дополнительной информации, чтобы дополнить его.

Любой элемент, который подвергается действию в пределах XAML, может быть доступен в коде в качестве свойства (есть некоторые исключения, но по большей части это верно).

<Grid x:Name="one" Grid.Row="0" Margin="49.667,15,15,15"> 
     <Grid x:Name="container1" Background="Red" Margin="10"/> 
     </Grid> 
    <Button Content="mov" Foreground="White" x:Name="first" HorizontalAlignment="Left" Margin="8,44.833,0,70.167" Width="29.334" Background="Black" Click="first_Click"/> 

Если вы хотите, вы можете получить доступ к свойствам сетки, как

private void first_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    this.one.Background = Brushes.Yellow; 
    this.one.Margin = new Thickness(0, 5, 10, 25); 
} 

Вам также не нужно использовать визуальный поиск дерева, так как вы предоставили имя сети, предоставляя код -behind связано с представлением, которое удерживает две сетки.

Вы можете просто сделать:

private void first_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    MessageBox.Show(this.container1.Name); 
} 
Смежные вопросы