2010-07-28 5 views
0

Я в настоящее время привязываю xml-файл к списку в C# WPF. В элементе itemtemplate я добавил элементы управления. следующим образом:Доступ к другим элементам элемента управления и элементам списка элементов на кнопке нажмите

<DataTemplate x:Key="SinglecueTemplate"> 
      <Grid Height="30" Width="425" Margin="3,3,0,3"> 
       <Button Content="{Binding XPath=nr}" Width="30" Style="{DynamicResource CUEStyle_Button_Inhoudknopje}" Template="{DynamicResource CUEStyle_singlecueknopnummer}" Height="Auto" HorizontalAlignment="Left" Background="#FFABCCED" Foreground="White" IsEnabled="False"/> 
       <TextBlock x:Name="name" Margin="54,0,114.667,0" Width="Auto" VerticalAlignment="Center" FontSize="16" Foreground="Gray" Text="{Binding XPath=Name}"/> 
       <Button x:Name="playbutton" Width="30" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_Rondknopje}" Height="Auto" HorizontalAlignment="Right" Margin="0,0.55,74.737,-0.55" Content="u" FontFamily="Wingdings 3" Foreground="#FF0178D3" Opacity="1" BorderBrush="#FF0178D3" Click="playcue"/> 
       <Button Width="30" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_Rondknopje}" Height="Auto" HorizontalAlignment="Right" Margin="0,0.55,37.071,-0.55" Content="¢" FontFamily="Wingdings 2" Foreground="Gray" Opacity="0.4"/> 
       <Button Width="15" Style="{DynamicResource CUEStyle_Button_Groot}" Template="{DynamicResource CUEStyle_kleinloopje}" Height="15" HorizontalAlignment="Left" Margin="15,0,0,-5.5" Content="Q" FontFamily="Wingdings 3" Foreground="White" FontWeight="Bold" FontSize="10.667" Opacity="1" VerticalAlignment="Bottom" BorderBrush="{x:Null}" Background="{x:Null}" IsEnabled="{Binding XPath=Loop}"/> 
       <TextBlock Margin="0,0,114.667,0" Width="81.07" VerticalAlignment="Center" FontSize="16" Foreground="Gray" Text="03:02:11" HorizontalAlignment="Right"/> 
      </Grid> 
     </DataTemplate> 

Теперь, когда playbutton щелкают Я хочу Acces других свойств от этого ListBoxItem, например текст из текстового блока. Я посмотрел на том, как это сделать и придумал следующее:

  private void playcue(object sender, System.Windows.RoutedEventArgs e) 
      { 
       Button playcue = (Button)sender; 
       Textbox titel = (Textbox)playcue.DataContext; 
       MessageBox.Show(titel); 
      } 

Но приведенный выше код дает мне ошибку о том, что тип Textbox неизвестно. Должен ли я что-то сделать с помощью datatemplate, чтобы я мог использовать другие элементы в шаблоне? Или можно получить доступ к узлам-близнецам из источника данных?

UPDATE

Ответ найден. Теперь для будущей ссылки:

private void playcue(object sender, System.Windows.RoutedEventArgs e) 
      { 
       Button playcue = (Button)sender; 
       XmlElement name = (XmlElement)playcue.DataContext; 
       MessageBox.Show(name.InnerText); 

      } 

возвращает все значения одноуровневых из пункта

Если вы хотите получить доступ к определенному родственным вы можете сделать так:

MessageBox.Show(name.SelectSingleNode("Name").InnerXml); 

ответ

1

Первой проблема заключается в том, что это TextBox не Textbox (C# чувствителен к регистру.)

Во-вторых, маловероятно, что ваш DataContext является TextBox. Это должен быть элемент в вашей коллекции ItemsSource. Итак, если пользователь нажимает на третью кнопку в списке, вы должны смотреть на 3-й элемент в своей коллекции ItemsSource. Поскольку, похоже, вы используете XML в качестве источника данных, я бы предположил, что элемент должен быть XElement или XmlElement.

Я предлагаю вам изменить Textbox titel = (Textbox)playcue.DataContext; на следующее:

XElement element = (XElement)playcue.DataContext; 

или

XmlElement element = (XmlElement)playcue.DataContext; 

Вам также необходимо изменить MessageBox заявление, а также.

Смежные вопросы