如何将OnClick事件从代码隐藏附加到ListBox的<datatemplate>内的WPF按钮

时间:2017-04-29 00:51:12

标签: c# wpf xaml

我需要找到一种方法将事件(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的

0 个答案:

没有答案