2015-05-23 2 views
0

У меня есть панель стека внутри DataGrid.RowDetailsTemplate. На панели стека у меня есть текстовое поле и кнопка. Функция кнопки в коде C# позади пыталась использовать значение из текстового поля, но есть ошибка:Переменная в stackpanel внутри DataGrid-RowDetailsTemplate не распознается

«Имя« toCheck »не существует в текущем контексте».

Что я могу сделать, чтобы использовать значение из текстового поля?

XAML:

<DataGrid.RowDetailsTemplate > 
       <DataTemplate > 
        <Border> 
         <StackPanel> 
          <Label Name="headLine" Content="what do you want to change:" HorizontalAlignment="Left" Height="40" Margin="10,50,0,0" VerticalAlignment="Top" Width="170"/> 
          <TextBox Name="toCheck" HorizontalAlignment="Left" Text="{Binding Name}" Height="23" Margin="34,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="130"/> 
          <Button Name="check" Content="Check" HorizontalAlignment="Left" Margin="105,50,0,0" VerticalAlignment="Top" Width="75" Click="check_Click"/> 
         </StackPanel> 
        </Border> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 

C# позади:

public partial class window1 : UserControl 
    { 
     public window1() 
     { 

      InitializeComponent(); 

     } 

     private void check_Click(object sender, RoutedEventArgs e) 
     { 
      string needCheck = toCheck.Text; 
      if (needCheck == "abc") 
      { 
       MessageBox.Show("its abc"); 
      } 
     } 

спасибо всем.

ответ

0

Предполагая, что вы называете ваш DataGrid DataGrid, то это то, что вам нужно:

private void check_Click(object sender, RoutedEventArgs e) 
    { 
     DataGridRow dgRow = (DataGridRow)(dataGrid.ItemContainerGenerator.ContainerFromItem(dataGrid.SelectedItem)); 

     if (dgRow == null) return; 
     DataGridDetailsPresenter dgdPresenter = FindVisualChild<DataGridDetailsPresenter>(dgRow); 

     DataTemplate template = dgdPresenter.ContentTemplate; 
     TextBox textBox = (TextBox)template.FindName("toCheck", dgdPresenter); 

     string needCheck = textBox.Text; 
     if (needCheck == "abc") 
     { 
      MessageBox.Show("its abc"); 
     } 
    } 

    public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(obj, i); 
      if (child != null && child is T) 
       return (T)child; 
      else 
      { 
       T childOfChild = FindVisualChild<T>(child); 
       if (childOfChild != null) 
        return childOfChild; 
      } 
     } 
     return null; 
    } 
Смежные вопросы