Hi I have a listbox binded to a xml file, and each item I gave them a button data template so I can easily register a click event to each item.
I would love to get the clicked button's content to do some query on.
Here is my code
XAML
<ListBox Name="listBox1" >
<ListBox.ItemsSource>
<Binding Source="{StaticResource keywordLib}" XPath="Position/Keyword/Word"/>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" Click="keyword_Click"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
After hours of googling for solutions. I know I should use sender from the click event, and that worked fine for a normal button, didn't word here.
private void keyword_Click(Object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
String keyword = btn.Content.ToString();
MessageBox.Show(keyword);
}
The messagebox showed "System.Xml.XmlElement". Instead of the button content.
Many thanks to anyone could help me out on this. I spend so much on this, and I could guess the solution is just one line code.
cast the content of the button to an System.Xml.XmlElement. Then use the InnerText property of this element. Or maybe you have to do some more operation to get to your text. It depends on how your XML file is built.
Rq : when i need to distinguish several identical controls in code, i use Tags. So i can set content and Tag independantly (required for multi-language apps.) or even use a 'tag-logic'when choosing the Tag (prefixe/suffixes, index, ...) which simplify handling in code.
I know you got the answer but, this is another type to get the content of button.
private void keyword_Click(Object sender, RoutedEventArgs e)
{
var keyword= (e.Source as Button).Content.ToString();
MessageBox.Show(keyword);
}
来源:https://stackoverflow.com/questions/11404918/get-clicked-button-content-from-button-styled-listbox-binded-to-xml