我目前正在将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>
现在,当点击播放按钮时,我想访问该listboxitem中的其他属性,例如文本块中的文本。我抬头看看如何做到这一点,并想出了以下内容:
private void playcue(object sender, System.Windows.RoutedEventArgs e)
{
Button playcue = (Button)sender;
Textbox titel = (Textbox)playcue.DataContext;
MessageBox.Show(titel);
}
但上面的代码给出了一个错误,指出Textbox类型未知。我是否必须对datatemplate做一些事情才能访问模板中的其他项目?或者是否可以从数据源访问兄弟节点?
更新
找到答案。现在供将来参考:
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);
答案 0 :(得分:1)
第一个问题是它是TextBox
而不是Textbox
(C#区分大小写。)
其次,您的DataContext
不太可能是TextBox
。它应该是ItemsSource
集合中的一个项目。因此,如果用户单击列表中的第三个按钮,您应该查看ItemsSource
集合中的第3个项目。由于您似乎使用XML作为数据源,我猜这个项目应该是XElement
或XmlElement
。
我建议您将Textbox titel = (Textbox)playcue.DataContext;
更改为以下内容:
XElement element = (XElement)playcue.DataContext;
或
XmlElement element = (XmlElement)playcue.DataContext;
您还需要更改MessageBox
声明。