WPF - 如何从按钮处理程序中确定列表框中当前项的索引

时间:2009-01-11 05:41:33

标签: c# .net wpf

我有一个列表框,其中包含一个包含按钮的数据模板。

单击按钮时,我想进入按钮 单击处理程序当前列表框项的索引??

我该怎么做?

马尔科姆

6 个答案:

答案 0 :(得分:5)

更合适的答案,

private void Button_Click(object sender, RoutedEventArgs e)
{
   DependencyObject dep = (DependencyObject)e.OriginalSource;

   while ((dep != null) && !(dep is ListViewItem))
   {
     dep = VisualTreeHelper.GetParent(dep);
   }

   if (dep == null)
    return;

   int index = lstBox.ItemContainerGenerator.IndexFromContainer(dep); 
}

答案 1 :(得分:2)

希望波纹管代码能为您提供帮助。

private void Button_Click(object sender, RoutedEventArgs e)
{
    var b = (Button)sender;
    var grid = (Grid)b.TemplatedParent
    var lstItem = (ListBoxItem)grid.TemplatedParent;
    int index = lstBox.ItemContainerGenerator.IndexFromContainer(lstItem);
    // rest of your code here...
}

以上假设的XAML是名为lstBox的ListBox上的DataTemplate:

<DataTemplate x:Key="template">
  <Grid>
    <Button Click="Button_Click" Content="Press"/>
  </Grid>
</DataTemplate>

答案 2 :(得分:0)

您是否检查过列表框的“SelectedIndex”属性?可以通过单击按钮进行设置。

答案 3 :(得分:0)

可能迟到但在列表框“Items”上使用“IndexOf”会给你索引# 此致

答案 4 :(得分:0)

myListbox.Items.CurrentItem似乎正是您所寻找的。

答案 5 :(得分:0)

您好,您可以使用ContentPresenter.Content获取当前项目,而不是当前索引:

<DataTemplate DataType="{x:Type MyModel}">                    
            <StackPanel Orientation="Horizontal" Margin="0 5">
                <TextBlock Text="{Binding Title}" />

                <Button Content="Active" Click="Button_Click" />
            </StackPanel>
 </DataTemplate>

并在代码中:

private void Button_Click(object sender, RoutedEventArgs e)
    {
            var button = e.Source as Button;
            var contentPresenter = button.TemplatedParent as ContentPresenter;
            var myModel = (MyModel)contentPresenter.Content;            
    }