我需要找到一种方法将事件(OnClick)附加到ListBox的一部分按钮,在ListItem和DataTemplate元素中。这是从另一个应用程序中的C#脚本空间完成的,该空间不接受来自XAML代码的事件绑定,但允许我进行运行时绑定。对于不在像lstSaveSetups ListBox这样的数据模板中的其他控件,我使用LogicalTreeHelper,找到我需要的元素然后绑定它。这在这里不起作用,我也尝试过FindName以及许多其他方法。
这是XAML:
<ListBox Name="lstSavedSetups" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="25" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding 1stColumn}" />
<TextBlock Grid.Column="1" Text="{Binding 2ndColumn}" />
<Button Grid.Column="2" Name="btnDelete" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
简化的c#代码是:
System.IO.FileStream fs = new System.IO.FileStream(System.IO.Path.Combine(myBaseDir, @"listBox.xaml"), System.IO.FileMode.Open);
System.Windows.Controls.Page page = (System.Windows.Controls.Page)System.Windows.Markup.XamlReader.Load(fs);
lstSavedSetups = LogicalTreeHelper.FindLogicalNode(page, "lstSavedSetups") as System.Windows.Controls.ListBox;
System.Windows.Controls.Grid.SetRow(lstSavedSetups, 16);
System.Windows.Controls.Grid.SetColumn(lstSavedSetups, 1);
myGrid.Children.Add(lstSavedSetups);
//the following works
lstSavedSetups.SelectionChanged += lstSavedSetups_SelectionChanged;
//one of many examples of what does not work:
System.Windows.Controls.Button btnDelete = lstSavedSetups.ItemTemplate.FindName("btnDelete", lstSavedSetups) as System.Windows.Controls.Button;
btnDelete.Click += btnDelete_OnClick;
我没有包括我尝试的所有内容,但我开始认为我尝试了所有可以找到的解决方案,但没有设法让它发挥作用。
我做错了什么?任何帮助将非常感谢!谢谢!
Libor的