我有ListBox
TextBlocks
作为列表:
<ListBox Grid.Row="1" Margin="5">
<TextBlock Name="Address1" MouseDown="SongAddress"/>
<TextBlock Name="Address2" MouseDown="SongAddress"/>
<TextBlock Name="Address3" MouseDown="SongAddress"/>
<TextBlock Name="Address4" MouseDown="SongAddress"/>
</ListBox>
有四个TextBlocks
,每个都有MouseDown事件。我想为每一个操作采取不同的操作,我如何处理code-behind
哪一个被点击?
答案 0 :(得分:0)
StackOverflow上有许多问题可以解决这个问题。我假设您熟悉WPF中的how to write the code for an event handler。
签名看起来像:
private void SongAddress(object sender, RoutedEventArgs eventArgs)
然后 - 在你提到的情况下 - 取决于你如何你处理这个事件。您可以为每个按钮实现单独的事件处理程序,也可以将sender
强制转换为类型TextBlock
并从中获取区分属性。
未经请求的意见
包含类似的Name
属性值和相同的MouseDown
事件处理程序值会暗示每个TextBlock
共享一些概念上相似的目的。您可能想知道您是否确实需要四个单独的句柄,或者您是否可以通过更好地建模您的域来处理您要完成的任务。
答案 1 :(得分:0)
我认为您需要使用预览
并命名TextBox
<TextBox x:Name="tb01" PreviewMouseDown="tb01_PreviewMouseDown"/>
private void tb01_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (sender is TextBox)
{
TextBox tb = (TextBox)sender;
string s = tb.Name;
}
}
答案 2 :(得分:-1)
你尝试过使用不同的方法吗?
<ListBox Grid.Row="1" Margin="5">
<TextBlock Name="Address1" MouseDown="SongAddress1"/>
<TextBlock Name="Address2" MouseDown="SongAddress2"/>
<TextBlock Name="Address3" MouseDown="SongAddress3"/>
<TextBlock Name="Address4" MouseDown="SongAddress4"/> </ListBox>
或者也许是Switch Case?
private void SongAddress(object sender, MouseButtonEventArgs e)
{
switch (((TextBlock) sender).Name)
{
case "Address1":
//dosomething
break;
case "Address2":
//dosomething
break;
case "Address3":
//dosomething
break;
case "Address4":
//dosomething
break;
}
}