单击列表框中的按钮时,选择列表框中的行

时间:2014-02-23 17:55:55

标签: c# wpf listbox

我认为这是一件我想念的简单事情。

我正在编写的WPF应用中有一个ListBox。每行都有一个按钮,可以根据按钮所在的行执行简单操作。如果用户直接点击该按钮,则SelectedItem上的ListBox为空。如果我先单击该行,然后按预期单击SelectedItem行的按钮。

我希望能够在单击按钮时选择按钮所在的行。再说一遍,我假设我错过了一些简单的东西,但到目前为止,我的搜索空白。

1 个答案:

答案 0 :(得分:3)

如果您想在ListBoxItem按钮上选择ListBoxItem,可以通过将点击处理程序附加到按钮来执行此操作。

假设您有ListBox声明的XAML:

<ListBox x:Name="listBox" ItemsSource="{Binding SourceCollection}">
   <ListBox.ItemTemplate>
      <DataTemplate>
         <Button Content="{Binding PropertyName}" Click="Button_Click"/>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

您可以从处理程序中选择listBoxItem:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ListBoxItem selectedItem = (ListBoxItem)listBox.ItemContainerGenerator.
                               ContainerFromItem(((Button)sender).DataContext);
    selectedItem.IsSelected = true;
}

访问按钮的DataContext,它与ListBoxItem的按钮相同。因此,使用它,您可以从ItemContainerGenerator获取容器元素,即ListBoxItem。

在已获取的listBoxItem上将IsSelected设置为True