按钮单击时访问其他列表框项控件和属性

时间:2010-07-28 23:49:08

标签: c# binding

我目前正在将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);

1 个答案:

答案 0 :(得分:1)

第一个问题是它是TextBox而不是Textbox(C#区分大小写。)

其次,您的DataContext不太可能是TextBox。它应该是ItemsSource集合中的一个项目。因此,如果用户单击列表中的第三个按钮,您应该查看ItemsSource集合中的第3个项目。由于您似乎使用XML作为数据源,我猜这个项目应该是XElementXmlElement

我建议您将Textbox titel = (Textbox)playcue.DataContext;更改为以下内容:

XElement element = (XElement)playcue.DataContext;

XmlElement element = (XmlElement)playcue.DataContext;

您还需要更改MessageBox声明。